Kiedy oświadczam, że int
jest nieważny
int? i=null;
Czy i
tutaj staje się typem referencyjnym?
Nie, wartość null jest strukturą. To, co się dzieje, to fakt, że struktura dopuszczająca wartość null ma dwie wartości:
int
for int?
, DateTime
for DateTime?
itp.).HasValue
jest własnością.)Po ustawieniu wartości typu danych struktura zmienia się HasValue
na true.
Typy dopuszczające wartość null (przewodnik programowania w języku C #)
From Nullable Types (C # Programming Guide) :
Typy dopuszczające wartość null są wystąpieniami struktury System.Nullable.
i
Typy dopuszczające wartość null reprezentują zmienne typu wartości, którym można przypisać wartość null. Nie można utworzyć typu dopuszczającego wartość null na podstawie typu odwołania. (Typy odwołań obsługują już wartość null).
Więc nie, to nie są typy referencyjne.
Typy dopuszczające wartość null nie są typami wartości ani typami odwołań. Są bardziej podobne do typów wartości, ale mają kilka właściwości typów referencyjnych.
Oczywiście typy dopuszczające wartość null mogą być ustawione na null
. Ponadto typ dopuszczający wartość null nie może spełnić struct
ograniczenia ogólnego . Ponadto, gdy zapakujesz typ dopuszczający wartość null z HasValue
równą false
, otrzymasz null
wskaźnik zamiast opakowanego typu dopuszczającego wartość null (podobna sytuacja występuje w przypadku rozpakowywania).
Te właściwości sprawiają, że typy dopuszczające wartość null nie są typami wartościowymi, ale z pewnością nie są też typami odwołań. Są one własnym, specjalnym typem wartości null.
Nie, typ Nullable jest w rzeczywistości strukturą. Środowisko wykonawcze w inteligentny sposób obsłuży ustawienie wartości zerowej za Ciebie, nadając wygląd typu referencyjnego, gdy tak nie jest ...
Typy dopuszczające wartość null nie mogą być typami odwołań.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
źródło
Nie powinno być konieczne tworzenie typu referencyjnego dopuszczającego wartość null, ponieważ w jego miejsce można przekazać wartość null.
źródło