Lorsque je déclare un int
comme annulableLes types de référence sont-ils valables?
int? i=null;
Est-ce que i
ici devient un type de référence?
Lorsque je déclare un int
comme annulableLes types de référence sont-ils valables?
int? i=null;
Est-ce que i
ici devient un type de référence?
Non, un nullable est une structure. Ce qui se passe est que le struct annulable a deux valeurs:
int
pour int?
, DateTime
pour DateTime?
, etc.).HasValue
est la propriété.)Lorsque vous définissez la valeur du type de données, la struct change HasValue
true.
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 ....
Je voudrais interroger «gérer intelligemment», plutôt subjective. Personnellement, je trouve le comportement confus et souvent ennuyeux. – nicodemus13
Les types nulles ne peuvent pas être des types de référence.
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.
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.
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.
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
oups merci sepp2k. – kemiller2002