C#中的泛型类似于C++的模版,只是C++中的模版在实例化时需要模版的源代码,而C#中的泛型是在CLR中定义的,所以在C#中定义了泛型也可以在VB等其他环境下使用。也就是说泛型可以在一种.Net语言中定义,在另一种.Net语言中使用。泛型的本质是自己指定类型,所以在拆箱和封箱上的转化性能损失比较小,例如,定义了一个int类型的List泛型:List<int>,代码如下:
List<int> listInt=new List<int>();
listInt.Add(58);//不需要封箱和拆箱
int myInt=listInt[0];//不需要封箱和拆箱
这个时候是定义的是整数(int)类型属于数值类型,在与数值类型进行交换的时候不需要拆箱和封箱的操作。相比ArrayList性能更好,因为ArrayList存储的是对象。泛型在编译的时候进行类型检查,例如,下面的代码不通过,
listInt.Add("abc");
但是在ArrayList实例化的对象上,下面的代码编译通过,运行时抛出异常:
ArrayList arrList=new ArrayList();
arrList.Add(100);
arrList.Add("hello");
int i=arrList[1];//编译正常 运行异常
所以泛型在类型安全性方面优于其他实例化对象。