2011-06-29 8 views

Répondre

33

Un type de référence est stocké en tant que référence (comme un pointeur) dans une instance d'objet.
null signifie une référence qui ne pointe pas sur une instance d'un objet.

Les types de valeurs sont stockés comme valeurs elles-mêmes, sans aucune référence.
Par conséquent, il n'a pas de sens d'avoir un null valeur type — le type de valeur par définition contient une valeur.

Nullable<T> est un type de valeur avec un indicateur HasValue qui peut être false pour indiquer qu'il n'y a pas de valeur. Il a toujours une valeur (lorsque HasValue est false, Value est default(T)), mais le drapeau HasValue vous dit d'ignorer la valeur.
Cela n'a rien à voir avec null, sauf que le CLR unboxes automatiquement null valeurs à un boxed Nullable<T> avec HasValue ensemble à false.

+0

nous pouvons rendre les variables NULL en utilisant? opérateur. par exemple, int? x = null; – Shekhar

+3

@Shekhar: Il s'en rend compte. Cela n'a rien à voir avec 'null'. – SLaks

+0

merci pour l'explication. – Shekhar

0

Un type de valeur comme 'Int32' est stocké en utilisant trente-deux bits de stockage. Il y a précisément 4 294 967 296 valeurs qui peuvent être représentées par 32 bits, et un Int32 peut contenir 4 294 967 296 valeurs différentes. Si -2,147,483,648 n'était pas une valeur Int32 valide, il pourrait être possible de l'utiliser pour représenter "null", mais le fait que sa représentation binaire ne soit pas entièrement composée de zéros compliquerait les choses. En revanche, le nombre de combinaisons de bits possibles dans un type de référence dépasse de loin le nombre de références valides possibles, il n'y a donc aucune difficulté à réserver une combinaison de bits pour représenter "null".

+0

Toute référence (article) à ce que vous expliquez? Je ne suis toujours pas clair sur l'idée que vous avez placée. – Marshal

Questions connexes