【泛型中的协变和逆变】
协变指能够使用比原始指定的派生类型的派生程度更大的类型,逆变指能够使用比原始指定的派生类型的派生程度更小的类型。
协变与逆变的本质就是参数的替换。逻辑不变,只进行参数的替换,以实现更高程序的复用。
通常,协变类型参数可用作委托的返回类型,而逆变类型参数可用作参数类型。 对于接口,协变类型参数可用作接口的方法的返回类型,而逆变类型参数可用作接口的方法的参数类型。
协变是out,逆变是in。
协变的例子:
逆变的例子,When the delegate of type Action<Base> is invoked as if it were a delegate of type Action<Derived>, its argument must be of type Derived:
【注意要点】
-
在 .NET Framework 4中,Variant 类型参数仅限于泛型接口和泛型委托类型。
- 泛型接口或泛型委托类型可以同时具有协变和逆变类型参数。
- 变体仅适用于引用类型;如果为 Variant 类型参数指定值类型,则该类型参数对于生成的构造类型是不变的。
- 变体不适用于委托组合。
参考:http://msdn.microsoft.com/zh-cn/library/dd799517(v=vs.110).aspx#DelegateVariantTypeParameters