C#特性聚焦:协变和逆变

为了匹配Java及支持J#,.NET数组总是一个协变变量。不幸的是,这样做是一种不安全的方式,在数组中存储值的时候都需要进行运行时检查。对于.NET 2和泛型,协变和逆变变异都不能支持了。

\

.NET 4将在接口和委托上支持安全的协变和逆变。为了实现这种功能,在接口上的类型应该被标记为“in”或“out”修饰符。如果标记为out,那么接口就支持协变,并且给定的类型只能表现为一个返回类型或只读属性。如果标记为in,那么类型只能表现为一个参数或只写属性。

\

这个功能只对引用类型有效,在结构上不允许变异。通过引用传递的参数同样也不允许。可被标记为支持变异的主要接口和委托有,IEnumerable、IQueryable、Func和Action等。

\

更多关于这个功能的信息可以浏览我们的文章《在.NET泛型中协变和逆变》以及Eric Lippert的 Co- and contra-variance: how do I convert a List(Of Apple) into a List(Of Fruit)

\

查看英文原文:C# Feature Focus: Co- and Contra-variance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值