2013-06-06 8 views
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 
{ 
} 
+0

sınıf kendi tabanından elde değil 'Liste ' List '' kaynaklanmaktadır:

Sen bu şekilde çağırır. –

+0

@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? –

+1

Sadece bu şekilde uygulanmadı. http://marcgravell.blogspot.fr/2009/02/what-c-40-covariance-doesn-do.html –

cevap

İlgili konular