栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

仍然对协方差和矛盾和输入/输出感到困惑

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

仍然对协方差和矛盾和输入/输出感到困惑

C#4.0中的协方差和协方差都涉及使用派生类而不是基类的能力。in / out关键字是编译器提示,用于指示是否将类型参数用于输入和输出。

协方差

C#4.0中的协方差由

out
关键字辅助,这意味着使用
out
type参数的派生类的泛型类型是可以的。因此

IEnumerable<Fruit> fruit = new List<Apple>();

由于

Apple
Fruit
List<Apple>
可以安全地用作
IEnumerable<Fruit>

逆差

矛盾是

in
关键字,它表示输入类型,通常在委托中。原理是相同的,这意味着委托可以接受更多派生类。

public delegate void Func<in T>(T param);

这意味着如果我们有一个

Func<Fruit>
,可以将其转换为
Func<Apple>

Func<Fruit> fruitFunc = (fruit)=>{};Func<Apple> appleFunc = fruitFunc;

如果它们基本上是相同的东西,为什么将它们称为协/逆方差?

因为即使原理相同,也可以安全地从派生类型转换为基类,但在输入类型上使用时,我们可以安全地将较少派生类型(

Func<Fruit>
)强制转换为更多派生类型(
Func<Apple>
),这很有意义,因为任何需要
Fruit
,也可以服用
Apple



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470739.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号