Je suis tombé sur un comportement étrange que je ne comprends pas et ne peux pas trouver une réponse à. Avec SubClass1
et SubClass2
sous-classes étant à BaseClass
j'ai la méthode:Variable avoir un type hors champ
private void SomeMethod(BaseClass obj)
{
if (obj.GetType() == typeof(SubClass1))
{
var variable = (SubClass1) obj;
}
else if (obj.GetType() == typeof(SubClass2))
{
var variable = (SubClass2) obj;
}
}
Pour moi, il semble que les deux déclarations de variable
sont dans différents champs d'application et que var
serait soit SubClass1
ou SubClass2
selon le type réel de obj
envoyé à la méthode.
Mais lorsque j'appelle cette méthode avec un objet de type SubClass2
la conversion de BaseClass
à SubClass2
dans la clause else renvoie toujours null.
Lorsque je déboguer le code que je vois immédiatement lors de l'entrée du procédé, à savoir avant d'atteindre l'une quelconque des déclarations variable
, variable
est de type SubClass1
qui ofcource est la raison pour laquelle la distribution de obj
rendements nuls.
Quelqu'un peut-il me dire pourquoi variable
a un type avant qu'il ne soit déclaré?
'Mais quand j'appelle cette méthode avec un objet de type SubClass2, la conversion de BaseClass en SubClass2 dans la clause else renvoie toujours null. C'est impossible. Il ne peut * jamais * être "nul" dans cette situation. – Servy
C'est un comportement de débogueur, pas votre code. Ce sont deux variables distinctes, dans des portées distinctes, de types différents. Votre code n'aurait pas compilé autrement. Quelque chose d'autre se passe. – dasblinkenlight
@Igor Le code ne peut jamais ne pas être lancé, étant donné que le type est vérifié en premier. – Servy