泛型定义:泛型是通过参数化类型来实现在同一份代码上操作多种数据类型的奇数
利用“参数化类型”将类型抽象化,从而实现灵活的复用。泛型类型是C#2.0以后的新的方法,不是语法糖
1:减少装箱和拆箱,提高运行的效率
2:类型安全
3:代码重用
泛型增强了代码的可读性
泛型有助于实现代码重用,保护类型的安全以及提高性能
我们可以创建泛型集合类
泛型实现了类型和方法的参数化
我们还可以对泛型类进行约束以及和访问特定数据类型的方法
关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取
类型定义时,将指定类型参数(Type parameter,通常以t表示),紧随类名,并包含在《》符号内
对于具有类型参数的类型,我们称其为:开发式类型;而对于为类型参数传入实际参数的类型被称为:封闭式类型
struct :类型参数必须是值类型。
class:参数必须是引用类型
new():类型参数必须具有无参数的公共构造函数。
《基类名》 类型参数必须是指定的基类或派生类的基类子类
《接口名称》类型参数必须是制定的接口或是实现制定接口。
在c#2.0中,方法可以定义特定与其执行范围的泛型参数
泛型方法,提供了更加多变的灵活性。泛型方法可以存在于泛型类,也可以在于非泛型类中。你可以将类型参数作为某个方法的参数,返回值或者局部变量,该类型参数可能并不被整个类所需要,而更明确的用于某个方法
泛型接口定义 public interface IFace<T> { T SayHi(); void SayHello(T msg); }
List<T> 对应ArrayList集合类SortedList<TKey, TValue> 对应SortedList集合类Queue<T> 先进先出的集合类Stack<T> 后进先出的集合类Collection<T> 自定义泛型集合的基类Dictionary<TKey, TValue> 对应于Hashtable集合类
类中的静态类型,无论被使用多少次内存中都只存在一个。静态构造函数只会执行一次。 在泛型类中,T类型不同,每个不同的T类型,都会产生一个不同的副本,所以会产生不同的静态属性、静态构造函数。