2010-06-30 7 views

Répondre

119

Non, un nullable est une structure. Ce qui se passe est que le struct annulable a deux valeurs:

  1. La valeur du type de données (int pour int?, DateTime pour DateTime?, etc.).
  2. 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 struct change HasValue true.

What is a nullable

+4

Vous ne pouvez pas surcharger l'opérateur '=' en C#. L'indicateur booléen est défini par l'opérateur de conversion implicite et non par l'opérateur d'affectation. – sepp2k

+0

oups merci sepp2k. – kemiller2002

6

Non, le type Nullable est en fait une struct. Le runtime gère intelligemment le paramétrage 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 voudrais interroger «gérer intelligemment», plutôt subjective. Personnellement, je trouve le comportement confus et souvent ennuyeux. – nicodemus13

24

De Nullable Types (C# Programming Guide):

types nullables sont des instances de la struct System.Nullable.

et

types nullables représentent des variables de type valeur qui peuvent être assignées à la valeur nulle. 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 null.)

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

0

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

11

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

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

Ces propriétés génèrent des types de valeurs non valables, mais elles ne sont pas non plus des types de référence. Ils sont leur propre type de valeur nullable.