C# 泛型

   泛型是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静态构造函数只执行一次。这就是泛型缓存。

原文地址:https://www.cnblogs.com/ZeedLee/p/10631600.html