Cette question a fait l' objet de mon blog sur 30 Mai 2013. Merci pour la grande question!
Vous vous retrouvez face à un vide de l'allée.
Quelqu'un vous demande "votre allée tenir une Honda Civic?"
Oui. Oui, il peut.
Quelqu'un points vous à une deuxième entrée. Il est également vide. Ils demandent "le contenu actuel de mon allée se loger dans votre allée?"
Oui, évidemment. Les deux allées sont vides! Donc clairement le contenu de l'un peut s'adapter à l'autre, car il n'y a aucun contenu dans la première place.
Quelqu'un vous demande "est-ce que votre allée contenir une Honda Civic?"
Non, il n'est pas.
Vous êtes en train de penser que l' is
de l'opérateur répond à la deuxième question: compte tenu de cette valeur, ne s'inscrit-elle dans une variable de ce type? N'référence null s'insérer dans une variable de ce type? Oui, c'est fait.
Ce n'est pas la question que l' is
opérateur de réponses. La question que l' is
opérateur de réponses à la troisième question. y is X
ne le demande pas "est - y
d'une valeur juridique d'une variable de type X
?" Il demande "Est - y
valide référence à un objet de type X
?" Depuis une référence null n'est pas une référence valide pour tout objet de tout type, la réponse est "non". Cette allée est vide; il ne contient pas une Honda Civic.
Une autre façon de voir les choses, c'est que y is X
réponses à la question "si je disais y as X
, aurais-je obtenir une valeur non null? Si y est nul, clairement la réponse est non!
À regarder d'un peu plus profond à votre question:
On s'attend à ce que la valeur null n'appartient à aucun de référence (ou nullable) type de
On serait en supposant implicitement qu'un type est un ensemble de valeurs, et que la compatibilité d'affectation d'une valeur de y avec une variable de type X est rien de plus ni moins que de vérifier si y est un membre de l'ensemble x.
Si c'est un moyen extrêmement commun de recherche à des types, qui n'est pas la seule façon de voir les types, et ce n'est pas la façon dont C# regarde types. Null références sont membres d'aucun type en C#; compatibilité d'affectation est pas simplement de la vérification un ensemble pour voir si elle contient une valeur. Tout simplement parce que d'une référence null est d'affectation compatible avec une variable de type référence X ne signifie pas que la valeur null est un membre de type X. "est d'affectation compatible avec la" relation "est un membre de type" relation à l'évidence beaucoup de chevauchement, mais ils ne sont pas identiques dans le CLR.
Si les réflexions sur le type, la théorie de l'intérêt que vous, découvrez mes derniers articles sur le sujet:
Quelle est cette chose que vous appelez un "type"? La première partie
Quelle est cette chose que vous appelez un "type"? Partie Deux