关于C#中协方差和逆变的几个问题

时间:2015-07-24 08:39:28

标签: c#

我一直在研究这个问题,而且有些事情我无法理解。简而言之,COvariance就是你需要BASE类时,但是使用DERIVED,而CONTRAvariance就是你需要DERIVED类而不是使用BASE,对吧?

我一直在观看此视频:https://www.youtube.com/watch?v=3MQDrKbzvqU 示例给出了:

//COvariance with object
Mammal m = new Zebra(); 

//CONTRAvariance with object
Zebra z = new Zebra();
ContravariantMethod(z);

static void ContravariantMethod(Mammal m) { m.Display(); }
需要ContravariantMethod基础中的

,但我提供了派生。那么逆变器怎么样呢?我得出结论视频是误导。

那么协变/逆变代表中的inout个关键字呢? 虽然不允许返回BASE而不是DERIVED是有意义的,但为什么返回DERIVED而不是BASE是一个问题,以及为什么编译器如果遇到这样的问题就无法隐式转换它,如事实上呢?

当我尝试自己的逆转时,预计会给我一个错误:

mmmmm(new Mammal());
static void mmmmm(Zebra z) { z.Display(); }

1 个答案:

答案 0 :(得分:1)

协方差和Contravarience适用于泛型和代表。所以你的哺乳动物方法既不是协方差,也不是反变异。这只是多态性。协方差和Contravarience与out和泛型修饰符密切相关。要了解有关通用修饰符的更多信息,请参阅以下链接:

out

in

希望链接有所帮助!