奔腾不止
此后如竟没有炬火,我便是唯一的光......

为什么要使用泛型(泛型可以继承的):

1,重用代码;

2,类型安全:编译时检查,尽早暴露问题(相对object而言);

3,提高性能:编译时生成,避免装箱/拆箱;

泛型的类型约束where T:

1,struct:只能是值类型,由struct定义;

2,class:只能是引用类型,class定义;

3,new():必须包含一个公共的无参构造函数;

4,person:只能是person及其子类;

5,ISort:只能是ISort及其实现;

可以为多个泛型参数定义多个约束,也可以为一个泛型参数定义多个不冲突的约束;

只有接口或委托的泛型才能声明变体:

协变(covariance)out:子类可以给父类,IEnumerable<T>,IEnumerator<T>等;

逆变(contra variance)in:父类可以给子类,IComparer<T>,IComparable<T>等;

posted on 2020-09-27 19:23  奔腾不止  阅读(240)  评论(0编辑  收藏  举报