Ich stolperte in ein seltsames Verhalten, das ich nicht verstehe und kann keine Antwort finden. Mit SubClass1
und SubClass2
sind Subklassen BaseClass
habe ich die Methode:Variable haben einen Typ außerhalb Geltungsbereich
private void SomeMethod(BaseClass obj)
{
if (obj.GetType() == typeof(SubClass1))
{
var variable = (SubClass1) obj;
}
else if (obj.GetType() == typeof(SubClass2))
{
var variable = (SubClass2) obj;
}
}
Mir scheint es, dass die beiden Erklärungen von variable
sind in verschiedenen Bereichen und dass var
würde entweder SubClass1
oder SubClass2
sein entsprechend der tatsächlichen Art von obj
an die Methode gesendet.
Aber wenn ich diese Methode mit einem Objekt vom Typ SubClass2
aufrufen, gibt die Umwandlung von BaseClass
nach SubClass2
in der Else-Klausel immer null zurück.
Wenn ich debuggen den Code ich, dass sofort, wenn das Verfahren der Eingabe, das heißt bevor ich einem der variable
Erklärungen erreicht, variable
vom Typ SubClass1
die ofcource Der Grund dafür ist die Besetzung von obj
null zurück.
Kann mir jemand sagen, warum variable
einen Typ haben, bevor sie deklariert ist?
'Aber wenn ich diese Methode mit einem Objekt vom Typ SubClass2 aufrufen, gibt die Umwandlung von BaseClass zu SubClass2 in der Else-Klausel immer null zurück. Das ist unmöglich. Es kann in dieser Situation niemals "null" sein. – Servy
Es ist ein Debugger-Verhalten, nicht Ihr Code. Dies sind zwei separate Variablen in unterschiedlichen Bereichen unterschiedlichen Typs. Ihr Code hätte sonst nicht kompiliert. Etwas anderes passiert. – dasblinkenlight
@Igor Der Code kann niemals übergeben werden, da der Typ zuerst überprüft wird. – Servy