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


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 #)


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.


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.


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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.