c#中泛型2

这篇主要讲解泛型协变与逆变,有不正确的地方欢迎指正:

  1. 泛型协变与逆变

“协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。 

“逆变”则是指能够使用派生程度更小的类型。 

泛型中的继承需要用到协变与逆变,为了保证类型的安全,c#编译器对使用了out和In关键字的泛型参数添加了一些限制

支持协变(out)的类型参数只能用在输出位置:函数返回值

支持逆变(in)的类型参数只能用在输入位置:函数参数,或者委托参数出现。

 

 我们来看下Net  “System.Collections.Generic”命名空间下的IEnumerable泛型 接口,会发现他的泛型参数使用了out

 协变:

 

逆变:

 

逆变与协变使用:

 

 

 反之:

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/dqly/p/11653995.html