陣列是引用型別,不論其元素是值型別還是引用型別。
c#中陣列物件實現的各個介面:
**檢視:// 定義了淺拷貝的能力,因此陣列可以進行淺拷貝
system.icloneable
// icollection介面的子代,使用介面程式設計減輕耦合,該介面只定義了一些方法,有索引器,查詢元素位置,插入資料,移除索引位置資料這個方法,簡單的可以當作存放資料的容器,不能像list那樣具有很多資料處理的方法。
system.collections.ilist
// 集合的父基類,定義了返回元素數量,複製等一些集合型別最基本的方法,同時提供了可以同步訪問icollection物件元素的方法,陣列具有這些能力
system.collections.icollection
// 定義迭代遍歷的能力,陣列可以使用foreach迴圈
system.collections.ienumerable
// .net4 新增介面,定義了排序的能力,資料可以進行排序因此而來
system.collections.istructuralcomparable
// .net4 新增介面,定義比較能力,陣列可以比較陣列是否具有相同的內容
如果元素數量不同直接返回不相等,同時具有幾個元素就會執行幾次比較
system.collections.istructuralequatable
// 也提供了索引器,刪除插入查詢資料幾個方法,但是是泛型資料
/* 特殊的,所有的陣列預設繼承自array抽象類,該類實現了如上的介面,但在檢視原始碼不能看到陣列實現如下介面,這些介面實在clr動態為一維陣列實現如下的介面 */
system.collections.generic.ilist >
// 提供泛型的能力,也有基本的增刪改查的功能
system.collections.generic.icollection >
// 乙個型別可以使用linq迭代,必須實現改介面,因此陣列可以使用linq查詢。
system.collections.generic.ienumerable >
// 唯讀list,通過索引訪問該唯讀list的元素
system.collections.generic.ireadonlylist >
// 唯讀集合,通過索引訪問該唯讀集合的元素
system.collections.generic.ireadonlycollection >
通過執行該**,當建立的陣列是一維陣列時,該陣列物件會實現泛型介面,可以擁有linq查詢的能力,但當不是一維陣列時,此時的資料就不具有linq的能力,此時的陣列物件不實現泛型介面。foreach (var type in (new int[0,0]).gettype().getinte***ces())
console.writeline(type);
這些動作是由clr (公共語言執行時)執行的,內部原理並不清楚,但一般而言linq查詢是對集合進行操作,陣列屬於集合,但由於存在多維陣列,陣列不能直接實現ienumerable泛型介面獲取linq查詢的能力,而是在託管**執行時由clr負責處理,對一維陣列賦予介面能力,非一維陣列不能擁有介面能力。
當然上面這些都是對引用型別而言,值型別不會有這種動態賦予介面能力的操作。
C 陣列簡單知識
最近在學習c 由於之前學習了c 發現在c 與c 在陣列的操作中有較大的不同,所以總結一下加深記憶。例如宣告乙個一維的int陣列 int number 宣告乙個二維int陣列 int tnumber 宣告乙個三維陣列 以此類推 int snumber 隨後建立陣列 number new int 4 t...
C語言知識補充
做物件導向開發到現在,對c語言的認識在自身歷史上在不斷變化。現在深刻的感覺在c語言上的短板,已然成為自身更好提公升的絆腳石,如在進行較底層原始碼解讀 待整理fp fopen c t.txt r 為了輸入資料,開啟乙個已經存在的文字檔案 為什麼這麼說呢,這裡是 為了向fp這個檔案控制代碼輸入資料 而輸...
C 檔案讀寫補充知識
一.filestream詳解 1.filestream fs1 file.open c test.txt filemode.open filemode.open 直接用filestream類開啟檔案c test.txt 3.filestream fs3 file.open c test.txt fi...