I tipi di valori null sono tipi di riferimento?


Risposte:


136

No, un nullable è uno struct. Ciò che sta accadendo è che la struttura nullable ha due valori:

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

Quando si imposta il valore del tipo di dati, la struttura cambia HasValuein true.

Tipi nullable (Guida per programmatori C #)


26

Dai tipi nullable (Guida per programmatori C #) :

I tipi nullable sono istanze della struttura System.Nullable.

e

I tipi nullable rappresentano variabili di tipo valore a cui è possibile assegnare il valore null. Non è possibile creare un tipo nullable in base a un tipo di riferimento. (I tipi di riferimento supportano già il valore null.)

Quindi, no, non sono tipi di riferimento.


14

I tipi annullabili 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 structvincolo generico . Inoltre, quando si inscatola un tipo nullable con HasValueuguale a false, si ottiene un nullpuntatore invece di un tipo nullable inscatolato (una situazione simile esiste con unboxing).

Queste proprietà rendono i tipi nullable tipi non valore, ma sicuramente non sono neanche tipi di riferimento. Sono il loro tipo speciale di valore nullable.


6

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


2
Interrogerei "gestire in modo intelligente", piuttosto soggettivo. Personalmente trovo il comportamento confuso e spesso fastidioso.
nicodemus13


0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.