2010-06-30 19 views

Respuesta

119

No, a nullable es una estructura. Lo que está sucediendo es que la estructura anulable tiene dos valores:

  1. El valor del tipo de datos (int para int?, DateTime para DateTime?, etc.).
  2. Valor booleano que indica si el valor del tipo de datos se ha establecido. (HasValue es la propiedad.)

Cuando se establece el valor del tipo de datos, la estructura cambia HasValue true.

What is a nullable

+4

No puede sobrecargar el operador '=' en C#. La bandera booleana es establecida por el operador de conversión implícita, no por el operador de asignación. – sepp2k

+0

oops gracias sepp2k. – kemiller2002

6

No, el tipo anulable es de hecho una estructura. El tiempo de ejecución manejará inteligentemente la configuración de un valor nulo para usted, dando la apariencia de un tipo de referencia, cuando no lo es ...

+2

Preguntaría "maneja inteligentemente", en lugar de subjetivo. Personalmente encuentro que el comportamiento es confuso y a menudo molesto. – nicodemus13

24

De Nullable Types (C# Programming Guide):

tipos anulables son instancias de la estructura System.Nullable.

y

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

Así que, no, no son tipos de referencia.

0

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

11

Los tipos anulables no son ni tipos de valores ni tipos de referencia. Son más como tipos de valor, pero tienen algunas propiedades de tipos de referencia.

Naturalmente, los tipos que aceptan nulos pueden establecerse en null. Además, un tipo que admite nulos no puede cumplir una restricción genérica struct. Además, cuando coloca un tipo anulable con HasValue igual a false, obtiene un puntero null en lugar de un tipo anulado en caché (una situación similar existe con unboxing).

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

Cuestiones relacionadas