泛型中的协变和逆变

通常,协变类型参数可用作委托的返回类型,而逆变类型参数可用作参数类型。 对于接口,协变类型参数可用作接口的方法的返回类型,而逆变类型参数可用作接口的方法的参数类型。

协变和逆变统称为变体。 未标记为协变或逆变的泛型类型参数称为“固定参数”。

  • 在 .NET Framework 4中,Variant 类型参数仅限于泛型接口和泛型委托类型。
  • 泛型接口或泛型委托类型可以同时具有协变和逆变类型参数。
  • 变体仅适用于引用类型;如果为 Variant 类型参数指定值类型,则该类型参数对于生成的构造类型是不变的。
  • 变体不适用于委托组合。 也就是说,在给定类型 Action<Derived> 和 Action<Base>的两个委托的情况下,无法将第二个委托与第一个委托结合起来,尽管结果将是类型安全的。 变体允许将第二个委托分配给类型 Action<Derived> 的变量,但只能在这两个委托的类型完全匹配的情况下对它们进行组合。

参考:http://msdn.microsoft.com/zh-cn/library/vstudio/dd799517.aspx

原文地址:https://www.cnblogs.com/jes_shaw/p/3365289.html