泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能。
所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。
//1 引入泛型:延迟声明 //2 如何声明和使用泛型 //3 泛型的好处和原理 //4 泛型类、泛型方法、泛型接口、泛型委托 //5 泛型约束 //6 协变 逆变 //7 泛型缓存
一 、泛型方法的使用
二、泛型类,泛型接口,泛型委托(Action,Func)
三、 泛型约束
T:结构 |
类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。有关更多信息,请参见使用可空类型(C# 编程指南)。 |
T:类 |
类型参数必须是引用类型,包括任何类、接口、委托或数组类型。 |
T:new() |
类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。 |
T:<基类名> |
类型参数必须是指定的基类或派生自指定的基类。 |
T:<接口名称> |
类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。 |
T:U |
为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。 |
四、泛型继承约束
五、初识泛型缓存
一般类的静态构造函数,一个 类型 只初始化一次,而且常驻内存。 泛型类的静态构造函数,每个不同的T,都是生成一份不同的副本类,相同的T只会初始化一次。从上图输出结果可以看出,除了第一次循环需要实际计算外,其余的循环都是取得第一次的值,也就是 再次实例化泛型类时 ,相同的T静态构造函数只执行一次。这就是泛型缓存。