C#中的协变与逆变深入讲解-创新互联

什么是协变与逆变

创新互联建站欢迎咨询:13518219792,为您提供成都网站建设网页设计及定制高端网站建设服务,创新互联建站网页制作领域10多年,包括纸箱等多个行业拥有丰富建站经验,选择创新互联建站,为网站保驾护航!

MSDN的解释:

https://msdn.microsoft.com/zh-cn/library/dd799517.aspx

协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型。

泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。

一开始我总是分不清协变和逆变,因为MSDN的解释实在是严谨有余而易读不足。

其实从中文的字面上来理解这两个概念就挺容易的了:

"协变"即"协调的转变","逆变"即"逆向的转变"。

下面来一起看看详细的介绍吧

C#中的协变与逆变

一、使用协变(Covariance)和逆变(Contravariance )能够实现数组之间、委托实例和方法之间、泛型委托实例之间、泛型接口的变量和泛型类型的对象之间、泛型接口的变量之间的隐式转换;使用协变将允许使用比原指定类型派生程度更大(即更具体的)的类型,使用逆变将允许使用比原指定类型派生程度更小(即更不具体的)的类型;

1.协变和逆变都只支持引用类型,不支持值类型;

2.如果泛型接口或泛型委托的类型参数被声明为协变或逆变,则该泛型接口或泛型委托被称为变体(Variant);

二、数组只支持协变,即支持派生程度更大的类型的数组隐式转换为派生程度更小的类型的数组:

object[] myArray = new string[5];
IComparable[] myOtherArray = new string[5];

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:C#中的协变与逆变深入讲解-创新互联
文章URL:http://pwwzsj.com/article/dgpdjc.html