c#中泛型2

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

  1. 泛型协变与逆变

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

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

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

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

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

c#中泛型2_第1张图片

 

 

 c#中泛型2_第2张图片

 

 

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

c#中泛型2_第3张图片

 

 

 协变:

c#中泛型2_第4张图片

 

 

 

 

c#中泛型2_第5张图片

 

逆变:

 

c#中泛型2_第6张图片

 

 c#中泛型2_第7张图片

 

 

逆变与协变使用:

c#中泛型2_第8张图片

 

 c#中泛型2_第9张图片

 

 c#中泛型2_第10张图片

 

 反之:

 

 

 c#中泛型2_第11张图片

 

c#中泛型2_第12张图片

 

 

 

 c#中泛型2_第13张图片

 

 

 

 c#中泛型2_第14张图片

 

 

 

 c#中泛型2_第15张图片

 

你可能感兴趣的