Visual C#核心编程之泛型

1、泛型是一种解决方法。泛型是参数化的类型和方法。每个类型形参是一个未指定的类型的占位符。泛型类型或方法的多态性行为是通过类型形参表现出来的,着就是所谓的参数多态化。
2、泛型取消了不必要的装箱和取消装箱操作,本质上是类型安全的,增强了清晰性
3、不能是泛型的类型和成员函数如下
  非托管类型
  构造函数
  运算符成员
  属性(Property)
  索引器
  属性(Attribute)
4、类、结构和接口都可以是泛型。
5、泛型类型也成为构造类型,有开放式构造类型和封闭式构造类型。开放式构造类型至少有一个类型的形参,该类型形参是一个占位符,不受具体类型的约束。封闭式构造类型,所有的类型形参都是受约束的。受约束的形参称为类型实参,并被赋予一个具体的类型。
  重载方法可以是泛型方法和非泛型方法的混合。如果泛型方法和非泛型方法的组合有歧义,则调用非泛型方法
6、泛型约束
  class ClassName<T> where T : InterfaceName{}
  派生约束:要求类型实参与指定的类型关联,派生约束是由C#编译器实施的。class ZClass<K, V> where K : XClass where V : YClass {}
    值类型、开放式构造类型、基元类型、System.Array、System.Delegate、System.Enum、System.ValueType不能用作约束
  接口约束:泛型接口
  值类型约束:将一个类型形参限制为值类型,基元和结构都是值类型,值类型约束使用struct关键字;class ZClass<T> where T : struct {} 
  引用类型约束:将一个类型形参限定为引用类型。引用类型一般是用户定义的类型、包含类、接口、委托、字符串和数组类型。引用类型使用class关键字
    class ZClass<T> where T : class {}
  默认的构造函数约束:必须是约束列表中的最后一项,使用new运算符
7、泛型类型可以有静态成员。静态成员不能绑定到开放式构造类型
8、泛型类型可以包含运算符成员函数,不同的封闭类型有各自的静态成员集
9、泛型类型可以包含运算符成员函数,运算符成员函数不能是泛型的
10、序列化
11、泛型的本质:

原文地址:https://www.cnblogs.com/changweihua/p/2203186.html