私はclass
T
、実装していinterface
IBar
ます。
list
タイプの変数がありますList<T>
。
言語の理解を深めるための2つの質問:
なぜこれが機能しないのですか?
var foo = (ICollection <IBar>)list; // fails!
それを回避する方法(可能であれば)?
私はclass
T
、実装していinterface
IBar
ます。
list
タイプの変数がありますList<T>
。
言語の理解を深めるための2つの質問:
なぜこれが機能しないのですか?
var foo = (ICollection <IBar>)list; // fails!
それを回避する方法(可能であれば)?
なぜこれが機能しないのですか?:
var foo = (ICollection <IBar>)list;
たとえばT = Foo
、2番目のクラスがありFoo2 : IBar
ます。
次に、次のように続行できます。
var foolist = (ICollection <IBar>)list;
foolist.Add(new Foo2()); // compiles, since Foo2 also implements IBar
ワム!にを追加しようとしたため、実行時に型違反が発生しFoo2
ましたList<Foo>
。
これを回避するために、はのサブタイプですが、はのサブタイプでICollection<Foo>
はありません。この背後にある理論は、共変性と反変性です。ICollection<IBar>
Foo
IBar