To było pytanie tematem mojego bloga 30 maja 2013 roku . Dzięki za świetne pytanie!
Patrzysz na pusty podjazd.
Ktoś pyta cię "czy twój podjazd może pomieścić Honda Civic?"
Tak. Tak, może.
Ktoś wskazuje na drugi podjazd. Jest również pusty. Pytają "Czy obecna zawartość mojego podjazdu zmieści się na twoim podjeździe?"
Tak, oczywiście. Oba podjazdy są puste! Tak więc wyraźnie zawartość jednego może zmieścić się w drugim, ponieważ na pierwszym miejscu nie ma zawartości żadnego.
Ktoś pyta: „Czy na Twoim podjeździe znajduje się Honda Civic?”
Nie.
Myślisz, że isoperator odpowiada na drugie pytanie: czy przy tej wartości mieści się ona w zmiennej tego typu? Czy zerowe odwołanie pasuje do zmiennej tego typu? Tak.
To nie jest pytanie, na które isodpowiada operator. Pytanie, na które isodpowiada operator, jest pytaniem trzecim. y is Xnie pyta „ jest ywartość prawną zmiennej typu X? ” pyta „ Czy yprawidłowym odwołaniem do obiektu typu X? ” Ponieważ odwołanie zerowy nie jest ważne odniesienie do dowolnego przedmiotu dowolnego typu, odpowiedź brzmi „nie ”. Ten podjazd jest pusty; nie zawiera Hondy Civic.
Innym sposobem spojrzenia na to jest y is Xodpowiedź na pytanie „czy gdybym powiedział y as X, czy uzyskałbym wynik inny niż zerowy? Jeśli y jest zerowe, najwyraźniej odpowiedź brzmi: nie!
Aby przyjrzeć się bliżej swojemu pytaniu:
Oczekuje się, że wartość null należy do dowolnego typu odwołania (lub dopuszcza wartość null)
Można by niejawnie założyć, że typ jest zbiorem wartości , a zgodność przypisania wartości y ze zmienną typu X to nic innego, jak sprawdzenie, czy y jest członkiem zbioru x .
Chociaż jest to niezwykle powszechny sposób patrzenia na typy, nie jest to jedyny sposób patrzenia na typy i nie jest to sposób, w jaki C # patrzy na typy. Odwołania o wartości null są elementami członkowskimi żadnego typu w języku C #; zgodność przypisania to nie tylko sprawdzanie zestawu, aby zobaczyć, czy zawiera on wartość. Tylko dlatego, że odniesienie zerowe jest przypisanie zgodne ze zmienną typu referencyjnego X, nie oznacza, że null jest członkiem typu X. Relacje „jest przypisanie zgodne z” i relacja „jest członkiem typu” mają oczywiście wiele nakładają się, ale nie są identyczne w środowisku CLR.
Jeśli interesują Cię rozważania na temat teorii typów, zapoznaj się z moimi ostatnimi artykułami na ten temat:
Co to za rzecz, którą nazywasz „typem”? Część pierwsza
Co to za rzecz, którą nazywasz „typem”? Część druga