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

135

Quand je déclare un intcomme nullable

int? i=null;

Devient iici un type de référence?

Vaibhav Jain
la source

Réponses:

136

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 ( intpour int?, DateTimepour DateTime?, etc.).
  2. Une valeur booléenne qui indique si la valeur du type de données a été définie. ( HasValueest la propriété.)

Lorsque vous définissez la valeur du type de données, la structure prend la valeur HasValuetrue.

Types Nullable (Guide de programmation C #)

kemiller2002
la source
26

À partir des types Nullable (Guide de programmation C #) :

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

et

Les types Nullable représentent des variables de type valeur auxquelles la valeur null peut être attribué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, non, ce ne sont pas des types de référence.

ChrisF
la source
14

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

Naturellement, les types Nullable peuvent être définis sur null. De plus, un type Nullable ne peut pas satisfaire une structcontrainte générique . En outre, lorsque vous boxez un type Nullable avec HasValueégal à false, vous obtenez un nullpointeur au lieu d'un type Nullable boxé (une situation similaire existe avec le déballage).

Ces propriétés font des types Nullable des types non-valeur, mais elles ne sont certainement pas non plus des types de référence. Il s'agit de leur propre type de valeur Nullable spécial.

Stephen Cleary
la source
6

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 le cas ...

Matthew Abbott
la source
2
Je questionne «gérer intelligemment», plutôt subjectif. Personnellement, je trouve le comportement déroutant et souvent ennuyeux.
nicodemus13
0

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

devlife
la source