C#进阶-泛型-变体

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

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>等;

如果这篇文章,对你有帮助,请点击关注,我会持续更新......
原文地址:https://www.cnblogs.com/-GoFurther/p/13741360.html