J'ai une question simple. si nous convertissons une variable nulle en un type. Je m'attends à ce que le compilateur lève une exception, mais ce n'est pas le cas. Et je veux vraiment savoir pourquoi. je veux dire
string sample1 = null as string;
string sample2 = (string)null;
object t1 = null;
TestClass t2 = (TestClass)t1;
peut-être dans le premier, car l'opérateur gère la gestion des exceptions. Mais d'autres échantillons doivent lever l'exception. Comment le compilateur gère ces situations, peut-être que puisque les variables sont nulles, il n'effectue pas d'opération de transtypage? Parce que s'il jette vraiment un pointeur nul, ce doit être une erreur.
Selon la documentation (Conversions explicites) vous pouvez convertir un type de base en un type dérivé.
Puisque null
est une valeur valide pour tous les types de référence, tant que la route de transtypage existe, tout devrait bien se passer.
object
null → TestClass
null fonctionne comme object
est une superclasse pour tous les types de référence.
Cependant, si vous essayez string
null → TestClass
null (en supposant que TestClass
n'est pas un sous-type de string
), vous trouverez une erreur de compilation sous la forme TestClass
n'est pas un type dérivé de string
.