我一直在调查这件事,但有一件事我不太明白。简而言之,COvariance是当你需要基类,但使用派生类时,而CONTRAvariance是当你需要派生类,但使用基类时,对吧?
我一直在看这个视频: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而不是派生是有意义的,但为什么返回派生而不是BASE是一个问题,事实上,如果是这样的问题,编译器为什么不能隐式转换它?
当我尝试自己的反差时,它是意料之中的,给了我一个错误:
mmmmm(new Mammal());
static void mmmmm(Zebra z) { z.Display(); }https://stackoverflow.com/questions/31605871
复制相似问题