首页 新闻 会员 周边 捐助

请教一个C#中协变与逆变的问题

0
悬赏园豆:20 [已解决问题] 解决于 2018-09-26 12:10

微软提供了这样一个委托:

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);

这个委托有15+重载,

在该委托中各参数前都有in,out等字样,

我自己照着写了一个,把in,out等完全去掉,也能正常运行,

上网了解了下,这是面向对象编程中的协变和逆变。。

大概了解了下意思:

协变是指需要父类做参数的时候,传子类进去也可以,这个很好理解,方便了我们编码,

而逆变是说需要子类的时候,传个父类进去也可以,这就有点不理解了,

在什么场合可以这样使用?也可能是我解理的不对。

想请高手们举个例子讲解一下,协变和逆变的使用场景。

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2018-04-06 13:19
< >
分享
最佳答案
0
收获园豆:15
dudu | 高人七级 |园豆:30948 | 2018-04-06 14:28
其他回答(2)
0

话说我一直都没理解逆变和协变到底是啥.

吴瑞祥 | 园豆:29449 (高人七级) | 2018-04-06 16:14
0

因为不知道谁会调用,所以限定一下类型,确保结果能正常使用

收获园豆:5
happydaily | 园豆:260 (菜鸟二级) | 2018-04-08 17:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册