本节内容参考《你必须知道的.NET》和《C#高级编程(第四版)》
一、解析泛型
泛型其实主要是为了实现代码的重用,那么它是如何实现的呢?在CLR2.0中,实现了专门的IL指令支持泛型操作,具体编译过程为:
(1)初次编译,首先生成IL代码和元数据,T只是作为类型占位符,不进行泛型类型的实例化。
(2)JIT编译,将以实际类型替换IL代码和元数据中的T占位符,并将其转换为本地代码,下一次对该泛型类型的引用将使用相同的本的代码。
注意:对于值类型和引用类型参数,泛型类型实例化有所不同。
(1)类型参数为值类型,JIT编译器为不同的值类型创建不同的本地代码
(2)类型参数为引用类型,共享本地代码的单个副本,这主要是因为引用类型变量都是指向托管堆的引用指针,对于指针完全可以使用相同的方式来操作。
二、基础概要
1、默认值
public T data; data = default(T);值类型的默认值为0,引用类型的默认值为null。对于结构类型,初始化为其成员相应的默认值。
2、约束
在定义泛型类时,对于能够用于实例化类型参数的类型所作的限制。
(1)T:new(),表示类型参数必须具有公共无参构造函数。当有多个约束存在时,new()约束置于最后。
(2)T:Class,表示类型参数必须是引用类型。