首先,我对SO和有关协变和逆变和一个大感谢博客出去看了很多解释埃里克利珀用于生产在这样一个伟大的系列赛协变和逆变.
但是我有一个更具体的问题,我试图让我的头脑稍微偏执一点.
据我所知,根据埃里克的解释,协方差和反方差都是描述转换的形容词.协变变换是保留类型顺序的变换,逆变变换是逆转变换的变换.
我理解协方差,我认为大多数开发人员直观地理解.
//covariant operation
Animal someAnimal = new Giraffe();
//assume returns Mammal, also covariant operation
someAnimal = Mammal.GetSomeMammal();
Run Code Online (Sandbox Code Playgroud)
这里的返回操作是协变的,因为我们保留了动物仍然比哺乳动物或长颈鹿大的大小.在这方面,大多数返回操作都是协变的,逆变操作是没有意义的.
//if return operations were contravariant
//the following would be illegal
//as Mammal would need to be stored in something
//equal to or less derived than Mammal
//which would mean that Animal is now less than or equal than Mammal
//therefore reversing the relationship
Animal someAnimal = Mammal.GetSomeMammal();
Run Code Online (Sandbox Code Playgroud)
这段代码当然对大多数开发人员没有意义.
我的困惑在于Contravariant参数参数.如果你有一个方法,如
bool Compare(Mammal mammal1, Mammal …Run Code Online (Sandbox Code Playgroud)