using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyGeneric.CC { /// <summary> /// 逆变(contravariant)与协变(covariant):只能用在接口和委托上面 /// out “协变”->”和谐的变”->”很自然的变化”->strin…
我们知道子类转换到父类,在C#中是能够隐式转换的.这种子类到父类的转换就是协变. 而另外一种类似于父类转向子类的变换,可以简单的理解为“逆变”. 上面对逆变的简单理解有些牵强,因为协变和逆变只能针对接口和代理类型.而父类和子类之间不存在这种逆变的概念. 协变和逆变的本质都是子类安全的转到父类的过程. 下面就来加深下印象,先定义两个类Car和Baoma public class Car { } public class Baoma : Car { } 明显Baoma(宝马)是Car的子类 1,先来…