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...