1、 泛型中心思想
延迟声明。
编译时使用占位符(`1,`2 数字表示对应的泛型参数个数),运行时用确定的类型进行替换。
同一个泛型类,不同的替换类型会动态生成不同的class。
2、 泛型缓存
适用于不同类型需要一份缓存的场景。
3、 泛型约束
基类/接口约束 Where T:People
引用类型约束 Where T:class
值类型约束 Where T:struct
无参数构造函数Where T:new()
4、 泛型的逆变和协变
只能放在接口/委托的泛型参数里面;协变保留分配兼容性,逆变与协变相反。
>out协变: 只能是返回结果,泛型中子类可以代替父类
>in逆变: 只能是输入参数,泛型中父类可以代替子类