2

シナリオ:

class A { }

class B : A { }

class C<T> where T: A { }

質問

C<A> = C<B>BがAのサブクラスであるのに、なぜカントするのですか?「暗黙的に変換できません」エラーをスローします

ありがとう

--UPDATE--C<A>それを認識 するための暗黙のメソッドを作成できますC<B>か?

4

4 に答える 4

3

Use co-variant if you need to do this, and because co-variant just work only with interface and delegate, so define an interface with the magic word out instead of class:

interface IC<out T> where T : A
{
}

So, you can assign like you want:

class CA : IC<A>
{}

class CB : IC<B>
{ }

IC<A> x = new CA();
IC<B> y = new CB();

x = y;
于 2013-02-07T09:24:50.367 に答える
0

あなたが求めているのは、ジェネリックスの共変性と反変性です。これは、インターフェースとデリゲートにのみ適用できます。これを確認できます

フレームワーク>=4で次のことができます:

interface IC<out T> where T : A

class C<T> : IC<T>  where T : A

IC<A> ica = new C<B>();

あなたの場合、あなたはのためのインターフェースを抽出する必要がありますclass C

于 2013-02-07T09:22:03.693 に答える
0

Why cant C<A> = C<B> when B is a subclass of A? BのサブクラスですがAC<B>のサブクラスではありませんC<A>C<B>との間には割り当ての互換性はありません C<A>

于 2013-02-07T09:22:20.813 に答える
0

C<A>ないのでC<B>

事はです; できれば

C<A> myA = new C<B>();
myA.Add(new A());

You'd have a problem, since B is A, but not A is B

于 2013-02-07T09:24:14.020 に答える