Diese Frage war das Thema meines Blogs am 30. Mai 2013 . Danke für die tolle Frage!
Sie starren auf eine leere Auffahrt.
Jemand fragt Sie: "Kann Ihre Auffahrt einen Honda Civic aufnehmen?"
Ja. Ja, kann es.
Jemand weist Sie auf eine zweite Auffahrt. Es ist auch leer. Sie fragen: "Kann der aktuelle Inhalt meiner Auffahrt in Ihre Auffahrt passen?"
Ja offensichtlich. Beide Einfahrten sind leer! So klar kann der Inhalt des einen in den anderen passen, weil es überhaupt keinen Inhalt von beidem gibt.
Jemand fragt Sie: "Enthält Ihre Auffahrt einen Honda Civic?"
Nein, tut es nicht.
Sie denken, dass der isOperator die zweite Frage beantwortet: Passt er angesichts dieses Werts in eine Variable dieses Typs? Passt eine Nullreferenz in eine Variable dieses Typs? Ja tut es.
Das ist nicht die Frage, die der isBediener beantwortet. Die Frage, die der isBediener beantwortet, ist die dritte Frage. y is Xfrage nicht „ ist yein Recht Wert einer Variable vom Typ X? “ Es fragt : „ Ist yeine gültige Referenz auf ein Objekt vom Typ X? “ Da eine Nullreferenz auf keine gültige Referenz jedes Objekt von jeder Art, ist die Antwort „nein ". Diese Auffahrt ist leer; Es enthält keinen Honda Civic.
Eine andere Sichtweise ist die y is XBeantwortung der Frage: "Wenn ich sagen y as Xwürde, würde ich ein Ergebnis ungleich Null erhalten? Wenn y null ist, lautet die Antwort eindeutig nein!"
Um Ihre Frage etwas genauer zu betrachten:
Man erwartet, dass der Nullwert zu einem beliebigen Referenztyp (oder Nullwerttyp) gehört
Man würde implizit annehmen, dass ein Typ eine Menge von Werten ist und dass die Zuweisungskompatibilität eines Wertes y mit einer Variablen vom Typ X nichts anderes als die Überprüfung ist, ob y ein Mitglied der Menge x ist .
Obwohl dies eine sehr verbreitete Art ist, Typen zu betrachten, ist dies nicht die einzige Art, Typen zu betrachten, und es ist nicht die Art, wie C # Typen betrachtet. Nullreferenzen sind Mitglieder ohne Typ in C #; Zuordnung Kompatibilität wird nicht überprüft lediglich einen Satz zu sehen , ob es einen Wert enthält. Nur weil ein NULL - Verweis ist Zuordnung kompatibel mit einem variablen Referenz Typ X bedeutet nicht , dass null ist Mitglied des Typ X. Des „ist Zuordnung kompatibel mit“ Beziehung und die „ist ein Mitglied des Typs“ Beziehung hat offensichtlich viel Überlappung, aber sie sind in der CLR nicht identisch.
Wenn Sie sich Gedanken über Typentheorie machen, lesen Sie meine neuesten Artikel zu diesem Thema:
Was ist das für ein Ding, das du "Typ" nennst? Teil eins
Was ist das für ein Ding, das du "Typ" nennst? Zweiter Teil