c 陣列簡單知識補充

2021-10-19 02:38:13 字數 1683 閱讀 5631

陣列是引用型別,不論其元素是值型別還是引用型別。

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 >

**檢視:

foreach (var type in (new int[0,0]).gettype().getinte***ces())

console.writeline(type);

通過執行該**,當建立的陣列是一維陣列時,該陣列物件會實現泛型介面,可以擁有linq查詢的能力,但當不是一維陣列時,此時的資料就不具有linq的能力,此時的陣列物件不實現泛型介面。

這些動作是由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...