C#在多级泛型上抛出错误

时间:2014-06-05 20:09:33

标签: c# oop generics inheritance

在我的C#代码中,我有以下层次结构(为了清晰起见,我省略了不必要的关键字):

B : A
C : B
D : C

L<T> : K where T : C
M : L<D>

现在我收到一个投射错误:

L<C> c = new M       -- error

这传递好了:

L<D> a = new M       --  ok
C b = new D          --  ok

为什么我在类型L<C>上收到此错误?显然,M L<D>可以追溯到L<C>以后D : C ..但为什么这是一个错误?此外,如果此错误是正确的,我该如何避免此类错误?

更新

还提出了runnable(我希望:))代码版本:

public abstract class A {}
public class B : A {}
public class C : B {}
public class D : C {}

public abstract class K {}
public class L<T> : K where T : C {}
public class M : L<D> {}

// -- ok:

L<D> a = new M();       //  ok
C b = new D();          //  ok

// -- error:

L<C> c = new M();       //  error

更新2

我对重新开放的投票是基于标记为&#34;重复&#34;的线程。这个问题描述了一个与集合有点不同的情况,它可以清楚地表明如何在集合类型之间进行转换,因为集合元素可以很容易地转换。然而,在我的情况下,情况并非如此,该解决方案不会起作用。所以我投票支持某人1)给出一个合适的解决方案2)解释如何在这里应用引用线程的解决方案3)解释,为什么没有解决方案。

0 个答案:

没有答案