我有以下复杂的继承层次结构:
I1<I3>
A1 : C1, I2
C2 : A1, I3
C3 : A2<C2>, I4
A2<C2> : I5, I1<C2>
图片形式:
写作:
I1<I3> i = new C3();
...导致编译错误“无法将源类型转换为目标类型...”。
为什么?
答案 0 :(得分:0)
协变和逆变通用参数应明确标记为。
以下代码编译时没有错误(请注意 out 关键字):
class tmp
{
class C1 {}
interface I2 {}
interface I3 {}
interface I4 {}
interface I5 {}
interface I1<out I3> {}
class A1 : C1, I2 {}
class C2 : A1, I3 {}
class C3 : A2<C2>, I4 {}
class A2<C2> : I5, I1<C2> { }
private void Main()
{
I1<I3> i = new C3();
}
}
当然,如果没有 out 关键字,它会失败并显示与您描述的错误消息相同的错误消息。