の一覧を表示する一覧
List<DerivedClass>
から
List<BaseClass>
までですが、コンパイラがこれを許可しない理由が分からない限り、私はそれをやっていて快適ではないと思います。
私が見つけた説明は、単に型の安全性に何らかの違反があると言っただけですが、私はそれを見ていません。誰か助けてくれますか?
List<DerivedClass>
からList<BaseClass>
への変換を許可するコンパイラの危険性はありますか? がList<A>
がList<B>
あり、その後、B
ある – A
場合は、記述している行動が共分散と呼ばれる
class Program
{
public static void Main()
{
BaseClass bc = new DerivedClass(); // works fine
List<BaseClass> bcl = new List<DerivedClass>(); // this line has an error
doSomething(new List<DerivedClass>()); // this line has an error
}
public void doSomething(List<BaseClass> bc)
{
// do something with bc
}
}
class BaseClass
{
}
class DerivedClass : BaseClass
{
}
クラスはそのベースから派生しますが、 '一覧は' '一覧 'から派生していません。 –
@TimSchmelterこの種の継承は、 'Generic'が 'Generic 'から派生したものとみなされる可能性があるということを意味しますか?あるいはそのような特徴が問題を引き起こすだろうか? –
それはちょうどそのように実装されていません。 http://marcgravell.blogspot.fr/2009/02/what-c-40-covariance-doesn-do.html –