web-dev-qa-db-fra.com

Les types nullables sont-ils des types de référence?

Lorsque je déclare un int comme nullable

int? i=null;

i devient-il ici un type de référence?

131
Vaibhav Jain

Non, un nullable est une structure. Ce qui se passe, c'est que la structure nullable a deux valeurs:

  1. La valeur du type de données (int pour int?, DateTime pour DateTime?, etc.).
  2. Une valeur booléenne qui indique si la valeur du type de données a été définie. (HasValue est la propriété.)

Lorsque vous définissez la valeur du type de données, la structure change HasValue en true.

Types nullables (Guide de programmation C #)

129
kemiller2002

De Types Nullable (Guide de programmation C #) :

Les types nullables sont des instances de la structure System.Nullable.

et

Les types nullables représentent des variables de type valeur auxquelles la valeur null peut être affectée. Vous ne pouvez pas créer un type nullable basé sur un type de référence. (Les types de référence prennent déjà en charge la valeur nulle.)

Donc, ce ne sont pas des types de référence.

24
ChrisF

Les types nullables ne sont ni des types de valeur ni des types de référence. Ils ressemblent davantage à des types de valeur, mais ont quelques propriétés de types de référence.

Naturellement, les types nullables peuvent être définis sur null. De plus, un type nullable ne peut pas satisfaire une contrainte générique struct. En outre, lorsque vous encadrez un type nullable avec HasValue égal à false, vous obtenez un pointeur null au lieu d'un type nullable encadré (une situation similaire existe avec le déballage).

Ces propriétés font des types nullable des types sans valeur, mais elles ne sont pas non plus des types de référence. Ils sont leur propre type spécial de valeur nullable.

12
Stephen Cleary

Non, le type Nullable est en fait une structure. Le runtime gérera intelligemment le réglage d'une valeur nulle pour vous, donnant l'apparence d'un type de référence, quand ce n'est pas ...

6
Matthew Abbott

Les types nullables ne peuvent pas être des types de référence.

http://msdn.Microsoft.com/en-us/library/2cf62fcy.aspx

1
Damien Dennehy

Vous ne devriez pas avoir besoin de faire d'un type de référence un type nullable car vous pouvez passer null à sa place.

0
devlife