24
Listeye ama hata alıyorum Listesi'nden dönüştürülemez:<DerivedClass> I <code>BaseClass</code> listesini alan bir işleve <code>DerivedClass</code> bir listesini iletmek çalışıyorum <BaseClass>
cannot convert from
'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>'
to
'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
Şimdi döküm olabilir Benim List<DerivedClass>
bir List<BaseClass>
için, ama derleyici neden buna izin vermez anladığım sürece bunu yapmaktan rahat hissetmiyorum.
Bulduğum bilgiler, yalnızca tür güvenliğinin bir şekilde ihlal edildiğini söylemişti, ancak göremiyorum. Bana yardım eden var mı?
List<BaseClass>
için List<DerivedClass>
dönüşümü sağlayan derleyici riski nedir? List<A>
List<B>
o zaman,B
olduğunu – A
eğer Tarif ettiğiniz davranış kovaryans denir
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
{
}
sınıf kendi tabanından elde değil 'Liste' List '' kaynaklanmaktadır:
Sen bu şekilde çağırır. –
@TimSchmelter Bu tür bir mirasın, 'Jenerik' 'Generic 'türetilmiş olarak düşünülebileceği bir özellik oluşturulabileceği anlamına mı geliyor? veya böyle bir özellik sorunlara neden olur mu? –
Sadece bu şekilde uygulanmadı. http://marcgravell.blogspot.fr/2009/02/what-c-40-covariance-doesn-do.html –