2010-06-30 16 views

risposta

119

No, un valore nullo è una struttura. Quello che sta accadendo è che la struct annullabile ha due valori:

  1. Il valore del tipo di dati (int per int?, DateTime per DateTime?, etc.).
  2. Un valore booleano che indica se il valore del tipo di dati è stato impostato. (HasValue è la proprietà.)

Quando si imposta il valore del tipo di dati, la struct cambia HasValue su true.

What is a nullable

+4

Non è possibile sovraccaricare l'operatore '=' in C#. Il flag booleano è impostato dall'operatore di conversione implicito, non dall'operatore di assegnazione. – sepp2k

+0

oops grazie a sepp2k. – kemiller2002

6

No, il tipo Nullable è in realtà una struct. Il runtime gestirà in modo intelligente l'impostazione di un valore nullo per te, dando l'aspetto di un tipo di riferimento, quando non lo è ....

+2

Vorrei interrogare "gestire in modo intelligente", piuttosto soggettivo. Personalmente trovo il comportamento confuso e spesso fastidioso. – nicodemus13

24

Da Nullable Types (C# Programming Guide):

tipi nullable sono istanze della struct System.Nullable.

e

tipi Nullable rappresentano le variabili tipo valore che può essere assegnato il valore nullo. Non è possibile creare un tipo nullable in base a un tipo di riferimento. (I tipi di riferimento supportano già il valore nullo)

Quindi, no non sono tipi di riferimento.

0

Non è necessario rendere un tipo di riferimento un tipo nullable poiché è possibile passare null al suo posto.

11

I tipi nullable non sono né tipi di valore né tipi di riferimento. Sono più simili ai tipi di valore, ma hanno alcune proprietà dei tipi di riferimento.

Naturalmente, i tipi nullable possono essere impostati su null. Inoltre, un tipo nullable non può soddisfare un vincolo generico struct. Inoltre, quando si annulla un tipo nullable con HasValue uguale a false, si ottiene un puntatore null invece di un tipo annullabile in scatola (una situazione simile esiste con unboxing).

Queste proprietà rendono tipi non validi di tipi annullabili, ma non sono certo tipi di riferimento. Sono il loro tipo speciale valore nullable.

Problemi correlati