首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于C#中协方差和逆方差的几个问题

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

Stack Overflow用户
提问于 2015-07-24 16:39:28
回答 1查看 73关注 0票数 0

我一直在调查这件事,但有一件事我不太明白。简而言之,COvariance是当你需要基类,但使用派生类时,而CONTRAvariance是当你需要派生类,但使用基类时,对吧?

我一直在看这个视频:https://www.youtube.com/watch?v=3MQDrKbzvqU,其中给出了示例:

代码语言:javascript
复制
//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而不是派生是有意义的,但为什么返回派生而不是BASE是一个问题,事实上,如果是这样的问题,编译器为什么不能隐式转换它?

当我尝试自己的反差时,它是意料之中的,给了我一个错误:

代码语言:javascript
复制
mmmmm(new Mammal());
static void mmmmm(Zebra z) { z.Display(); }
EN

回答 1

Stack Overflow用户

发布于 2015-07-24 17:37:22

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

out

in

希望链接能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31605871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档