Cuando declaramos una int
como anulable¿Los tipos de referencia son tipos anulables?
int? i=null;
¿Se i
aquí se convierten en un tipo de referencia?
Cuando declaramos una int
como anulable¿Los tipos de referencia son tipos anulables?
int? i=null;
¿Se i
aquí se convierten en un tipo de referencia?
No, a nullable es una estructura. Lo que está sucediendo es que la estructura anulable tiene dos valores:
int
para int?
, DateTime
para DateTime?
, etc.).HasValue
es la propiedad.)Cuando se establece el valor del tipo de datos, la estructura cambia HasValue
true.
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 ...
Preguntaría "maneja inteligentemente", en lugar de subjetivo. Personalmente encuentro que el comportamiento es confuso y a menudo molesto. – nicodemus13
Los tipos anulables no pueden ser tipos de referencia.
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.
No debería necesitar hacer un tipo de referencia de tipo anulable ya que puede pasar nulo en su lugar.
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.
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
oops gracias sepp2k. – kemiller2002