我一直在研究这个问题,而且有些事情我无法理解。简而言之,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
基础中的,但我提供了派生。那么逆变器怎么样呢?我得出结论视频是误导。
那么协变/逆变代表中的in
和out
个关键字呢?
虽然不允许返回BASE而不是DERIVED是有意义的,但为什么返回DERIVED而不是BASE是一个问题,以及为什么编译器如果遇到这样的问题就无法隐式转换它,如事实上呢?
当我尝试自己的逆转时,预计会给我一个错误:
mmmmm(new Mammal());
static void mmmmm(Zebra z) { z.Display(); }