概述
、泛型是一种类型参数化的概念。一个功能,传递不同的类型参数,可以操作多种数据类型
、泛型是一种延迟思想。在编译时,将类型参数生成占位符 ,在运行时,即时编译器(Just In Time - JIT)根据实际类型参数,将占位符替换过来
、泛型是 C# 2 推出的新功能
特性
、性能:泛型类 List 不使用对象,在使用时定义类型,避免装箱和拆箱操作,提高了性能
、类型安全:泛型类 List 定义了指定类型,只能添加指定类型数据
、二进制代码重用:泛型类定义一次,可以使用不同的类型实例化
约束
、where T:struct 类型参数必须是不可为 null 值类型。不能与 new() 和 unmanaged 结合使用
、where T:class 类型参数必须是引用类型。还应用于任何类、接口、委托或数组类型
、where T : class? 类型参数必须是可为 null 或不可为 null 的引用类型
、where T : notnull 类型参数必须是不可为 null 的类型
、where T : unmanaged 类型参数必须是不可为 null 的非托管类型。 不能与 struct 或 new() 结合使用
、where T:new() 类型参数必须具有公共无参数构造函数。 与其他约束一起使用时,必须最后指定。不能与 struct 和 unmanaged 结合使用
、where T:<基类名> 类型参数必须是指定的基类或派生自指定的基类
、where T:<接口名> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型
、where T:U 为 T 提供的类型参数必须是,为 U 提供的参数或派生自为 U 提供的参数
、where T : default 重写方法或提供显式接口实现时,如果需要指定不受约束的类型参数,此约束可解决歧义。 default 约束表示基方法,但不包含 class 或 struct 约束
泛型方法
、定义泛型方法,在方法名后面加上 , T 代表参数类型
例:void Method(T param)
、泛型方法的参数不确定类型,调用时根据传递的参数来确定类型
泛型类
、定义泛型类,在类名后面加上 ,也可指定多个类型,类型可以添加约束
例:
class Method
class Method where T:class
class Method<T1,T2>
class Method<T1,T2> where T:class where T:class