C 泛型學習總結(一)

2021-07-24 14:29:22 字數 1322 閱讀 8619

arraylist arrlist = new arraylist();

arrlist.add(「test」);

arrlist.add(1);

檢視arralylist的add方法,public virtual int add(object value),不能發現在add時候arraylist的引數型別是object,那麼當給arraylist傳遞乙個string或int形的引數時候,

就會有乙個把string或int隱式的轉成object的過程,也就是裝箱。這是消耗效能的一部分。

其次,我們在獲取arraylist裡的資料的時候,我們需要做如下處理:

var intvalue = (int)arrlist[0];
這裡顯式的把object物件轉成了int形,也就是拆箱。這是消耗效能的另一部分。

system.collections.generic 命名空間中的list類不使用物件,而是在使用時定義型別,比如下面例子中list類的泛型型別定義為int,在jit編譯器動態生成的類中使用時不進行裝箱、拆箱操作,大大的提高了效能。

var list = new list();

list.add(1);

var intvalue = list[0];

2,提高安全

var arrlist = new arraylist();

arrlist.add(1);

arrlist.add("test");

foreach (object item in arrlist)

上述**,因為arraylist的引數是object,所以add的時候可以任何型別,在編譯的時候都不會報錯,

然而在執行的時候有可能會把錯誤的型別轉成int,引起報錯。

而在使用了泛型後,初始化物件的時候傳入了型別,所以在add的時候如果傳入不正確的型別就會編譯不通過。大大降低了執行時候的錯誤,如下圖**

var list = new list();

list.add(1);

list.add("test"); //此處編譯報錯

3,二進位制**重用

泛型只需定義一次,就可以用不同型別去例項化它。如:

var listint = new list();

var liststring = new list();

4,**的擴充套件

c 泛型學習(一)

net 從2.0開始支援泛型。泛型可以幫助我們建立獨立於被包含型別的類和方法。不必再為不同型別編寫功能相同的方法或類了,只要建立乙個泛型類或者方法就可以實現對多種資料型別的操作。object型別雖然也能讓你實現這樣的功能,但它不是型別安全的。泛型不僅是c 語言的一種結構,而且是clr定義的。所以,在...

泛型學習總結

一.泛型約束 1.where t 類 t為引用型別.2.where t 結構 t為值型別.3.where t 基型別 t為制定基類或派生自指定基類.4.where t new t必須有乙個無引數的建構函式.這樣就可以再泛型中執行 t new t 5.where t 介面名稱 t必須是自定介面或實現指...

C 泛型總結

泛型,比較廣泛的資料型別。泛型是資料型別的一種通用表示形式,它可以表示任何一種資料型別 泛型的定義和引用 泛型是具有佔位符 型別引數 的類 結構 介面 和方法。它與普通類的區別是泛型多了乙個或多個表示型別的佔位符,這些佔位符永尖括號括起來。public class myclass 定義屬性mypro...