ich eine Liste von DerivedClass
an eine Funktion zu übergeben bin versucht, die eine Liste von BaseClass
nimmt, aber ich habe den Fehler:nicht aus Liste konvertieren Kann <DerivedClass><BaseClass> zur Liste
cannot convert from
'System.Collections.Generic.List<ConsoleApplication1.DerivedClass>'
to
'System.Collections.Generic.List<ConsoleApplication1.BaseClass>'
Jetzt konnte ich gegossen mein List<DerivedClass>
zu einem List<BaseClass>
, aber ich fühle mich nicht wohl, wenn ich nicht verstehe, warum der Compiler dies nicht erlaubt.
Erklärungen, die ich gefunden habe, haben einfach gesagt, dass es Typsicherheit irgendwie verletzt, aber ich sehe es nicht. Kann mir jemand helfen?
Wie groß ist das Risiko, dass der Compiler die Konvertierung von List<DerivedClass>
zu List<BaseClass>
zulässt?
Hier ist meine SSCCE:
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
{
}
Die Klasse von seiner Basis ergibt sich aber nicht die 'Liste' leitet sich von 'Liste '. –
@TimSchmelter Bedeutet das, dass diese Art der Vererbung möglicherweise zu einem Feature gemacht werden kann, bei dem man annehmen kann, dass 'Generic' von 'Generic ' abgeleitet werden kann? oder würde ein solches Feature Probleme verursachen? –
Es ist einfach nicht so implementiert. http://marcgravell.blogspot.fr/2009/02/what-c-40-covariance-doesn-do.html –