¿Los tipos anulables son tipos de referencia?

135

Cuando declaro un intcomo anulable

int? i=null;

¿Se iconvierte aquí en un tipo de referencia?

Vaibhav Jain
fuente

Respuestas:

136

No, un nulo es una estructura. Lo que sucede es que la estructura anulable tiene dos valores:

  1. El valor del tipo de datos ( intpara int?, DateTimepara DateTime?, etc.).
  2. Un valor booleano que indica si se ha establecido el valor del tipo de datos. ( HasValuees la propiedad)

Cuando establece el valor del tipo de datos, la estructura cambia HasValuea verdadero.

Tipos anulables (Guía de programación de C #)

kemiller2002
fuente
26

De tipos anulables (Guía de programación de C #) :

Los tipos anulables son instancias de la estructura System.Nullable.

y

Los tipos anulables representan variables de tipo de valor a las que se les puede asignar el valor nulo. No puede crear un tipo anulable basado en un tipo de referencia. (Los tipos de referencia ya admiten el valor nulo).

Entonces, no, no son tipos de referencia.

ChrisF
fuente
14

Los tipos anulables no son tipos de valor ni tipos de referencia. Se parecen más a los tipos de valor, pero tienen algunas propiedades de los tipos de referencia.

Naturalmente, los tipos anulables pueden establecerse en null. Además, un tipo anulable no puede satisfacer una structrestricción genérica . Además, cuando encajona un tipo anulable con HasValueigual a false, obtiene un nullpuntero en lugar de un tipo anulable en caja (existe una situación similar con el desempaquetado).

Estas propiedades hacen que los tipos anulables no sean de valor, pero tampoco son tipos de referencia. Son su propio tipo especial de valores anulables.

Stephen Cleary
fuente
6

No, el tipo Nullable es, de hecho, una estructura. El tiempo de ejecución gestionará de forma inteligente la configuración de un valor nulo para usted, dando la apariencia de un tipo de referencia, cuando no es ...

Matthew Abbott
fuente
2
Preguntaría 'manejar inteligentemente', bastante subjetivo. Personalmente, encuentro el comportamiento confuso y a menudo molesto.
nicodemus13
0

No debería necesitar convertir un tipo de referencia en un tipo anulable, ya que puede pasar nulo en su lugar.

devlife
fuente