泛型-泛型约束-逆变协变

泛型来源

没有泛型的时候。大家要写很多方法相同的方法,就是参数不一样。后面大家想了一个方法用Object类型作为参数。

随着.net 和编译器的升级

出现了泛型

1类型安全    。类型是明确指定的,不会出现类型转化的问题。 将运行时的错误转换到了编译时期

2减少拆箱装箱。   上面说的   参数用Object类型, 这样就要进行一次装箱拆箱。   性能对比  原生方法>泛型方法>Object参数方法

3方法复用

泛型原理

泛型编译完之后变成具体的类型,就是产生了很多对应的类,对应的方法。

泛型约束

指定泛型类型继承某个类 或者接口,有构造函数 只能是无参数的。

适用范围

协变逆变在接口泛型和委托泛型中而言

协变

把子类赋值给父类。OUT只能修饰输出参数。

IEnumerable<Para> lp = new List<Chid>();
IMyCustomList<Para> c = new MyCustomList<Chid>();

逆变

把父类赋值给子类。IN只能修饰输入参数。

IMyCustomList<Chid> c = new MyCustomList<Para>();

面向对象中任何父类都可以用子类表示,就是把子类赋值给父类。但是不能把父类赋值给子类。

 源码下载

原文地址:https://www.cnblogs.com/wudequn/p/6721676.html