C#泛型的抗变与协变
学习自
C#本质论6.0
https://www.cnblogs.com/pugang/archive/2011/11/09/2242380.html
Overview
一直以来,被抗变与协变的定义搞得头昏脑涨掰持不清,如果在加上泛型在其中作祟,就更加两眼发懵了。所以就暂时略过了这一拦路虎,但是今天在学习Kotlin泛型的时候再一次碰到了这里拦路虎,只硬着头皮迎难而上了。
抗边与协变的定义
协变: 子类想父类方向的类型转换称之为协变
//string[] 向 object[] 协变转换
string [] strArray = new string[10];
object [] objArray = strArray;
抗变: 父类向子类方向的类型转换称之为抗变
//委托的抗变
Action<object> actObj = Set;
Action<string> actStr = actObj;
抗变和协变是针对于泛型接口和委托来说的,但是数组也是存在协变的,但是数组的协变是不安全的
泛型的抗变与协变
受限制的泛型协变
在这里有一个让初学泛型的人非常疑惑的一个问题:
** 为什么List 的集合不能复制为List