Czy typy nullable są typami referencyjnymi?

Kiedy deklaruję {[1] } jako nullable

int? i=null;

Czy i tutaj staje się typem odniesienia?

Author: PiotrWolkowski, 2010-06-30

6 answers

Nie, nullable jest strukturą. Dzieje się tak, że nullable struct ma dwie wartości:

  1. wartość typu danych (int dla int?, DateTime dla DateTime?, itd.).
  2. wartość logiczna, która mówi, czy wartość typu danych została ustawiona. (HasValue jest własnością.)

Po ustawieniu wartości typu danych struktura zmienia HasValue na true.

Nullable types (C# Programming Guide)

 139
Author: kemiller2002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-05 22:58:59

From Nullable Types (C# Programming Guide):

Typy Nullable są instancjami systemu.Nullable struct.

I

Typy Nullable reprezentują zmienne typu value, którym można przypisać wartość null. Nie można utworzyć typu nullable na podstawie typu odniesienia. (Typy referencyjne obsługują już wartość null.)

Więc nie są to typy referencyjne.

 27
Author: ChrisF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-05 21:17:27

Typy Nullable nie są ani typami wartości, ani typami referencji. Są one bardziej podobne do typów wartości, ale mają kilka właściwości typów referencyjnych.

Oczywiście typy nullable mogą być ustawione na null. Co więcej, Typ nullable nie może zaspokoić ogólnego ograniczenia struct. Ponadto, gdy ustawisz Typ nullable z HasValue równy false, otrzymasz wskaźnik null zamiast typu nullable (podobna sytuacja występuje przy rozpakowywaniu).

Te właściwości sprawiają, że typy nullable nie są wartością typy, ale na pewno nie są typami referencyjnymi. Są one własnym specjalnym typem nullable-value.

 14
Author: Stephen Cleary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 13:13:42

Nie, Typ Nullable jest w rzeczywistości strukturą. Środowisko uruchomieniowe będzie inteligentnie obsługiwać ustawienie wartości null dla Ciebie, dając wygląd typu Odniesienia, jeśli nie jest....

 6
Author: Matthew Abbott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 12:24:48

Typy Nullable nie mogą być typami referencyjnymi.

Http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

 1
Author: Damien Dennehy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 12:25:33

Nie powinieneś tworzyć typu odniesienia jako typu nullable, ponieważ możesz przekazać null na jego miejsce.

 0
Author: devlife,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 13:09:45