Betrachten Sie den folgenden Codeblock
%Vor%Beachten Sie die Umwandlung von Base zu DerivedLeft in foreach-Anweisung. Dies kompiliert Fein (Visual Studio 2010), ohne Fehler oder gar Warnung. Offensichtlich erhalten wir bei der zweiten Schleifeniteration eine InvalidCastException. Wenn man mir eine Frage über die Reaktion des Compilers auf einen solchen Code stellen würde, würde ich ohne Zweifel sagen, dass der Compiler dies nicht unbemerkt lassen und zumindest eine Warnung erzeugen wird. Aber anscheinend nicht. Also, warum lässt der Compiler das durch?
Weil die Liste vom Typ List<Base>
ist und die Variable dl
in der foreach-Schleife vom Typ DerivedLeft ist, die Base als Basisklasse hat. Also kann während der Laufzeit arbeiten, aber muss nicht haben. Der Compiler überprüft nicht die Initialisierung Ihrer Liste.
Tags und Links c#