泛型是.NET2.0新提供的特性。
一、泛型的一個主要優點就是效能。
在出現泛型之前,如果對實值型別使用集合類,就必須把實值型別裝箱成參考型別,然後加入到集中中,在使用集合時,又需要把參考型別拆箱成實值型別。如下面的樣本顯示了System.Collections命名空間中的ArrayList類,ArrayList儲存物件,Add()方法定義為需要把一個對象作為參數,所以要裝箱一個整數類型,讀取時又要進行拆箱。ArrayList list = new ArrayList();
list.Add(10);
int i1 = (int)list[0];
foreach(int i2 in list)
{
Console.WriteLine(i2);
}
裝箱和拆箱的實現都不複雜,但效能損失較大,如果迭代的項數多時對效能的損失更為明顯。
為了避免這種效能的損失,到了.NET2.0後,就可以使用泛型。
System.Collections.Generic命名空間中List<T>類不使用對象,而是在使用時定義類型。下面樣本,List<T>類的泛型型別定義為int,所以int類型在JIT編譯器動態產生的類中使用,不再進行裝箱和拆箱的操作,從而就避免了這方面的效能損失。List<int> list = new List<int>();
list.Add(10);
int i1= list[0];
foreach(int i2 in list)
{
Console.WriteLine(i2);
}
二、泛型的另外一個特點就是型別安全
在普通集合中,可以在這個集合中添加任何類型,如在ArrayList類型的集合中,可以添加整數,字串等類型的對象,如果這個時候用foreach去迭代集合中的元素,就會產生異常。
錯誤應該儘早發現。在泛型類List<T>中,泛型型別T定義了運行使用的類型,即除了T這種類型,其它類型無法添加到泛型的集合中去。
三、二進位代碼的重用
泛型允許更好地重用二進位代碼,泛型類可以定義一次,用許多不用類型執行個體化。如定義List<T>泛型類,則可以用int,字串等類型執行個體化。List<T> intList = new List<T>();
intList.Add(10);
List<string> stringList = new List<string>();
stringList.Add("aryang");