为什么类型参数的方差会影响其嵌套类型参数的非法转换被捕获的时间?

时间:2016-07-31 23:02:19

标签: c# casting runtime-error covariance

具有以下类结构:

class Base {}
class Derived : Base {}
interface Cov<out T> {
}
class Inv<T> : Cov<T> {}

令我惊讶的是,以下演员编译没有错误,但在运行时抛出InvalidCastException

Cov<Inv<Base>> v = (Cov<Inv<Base>>)(new Inv<Inv<Derived>>());

协方差显然至关重要,因为用Cov取代外Inv如下:

Inv<Inv<Base>> v = (Inv<Inv<Base>>)(new Inv<Inv<Derived>>());

按预期发出编译器错误:

  

错误CS0030:无法转换类型'ParameterCast.Inv&lt; ParameterCast.Inv&lt; ParameterCast.Derived&gt;&gt;'到'ParameterCast.Inv&lt; ParameterCast.Inv&lt; ParameterCast.Base&gt;&gt;'

为何出现差异?

0 个答案:

没有答案