De MSDN:
la palabra clave NULL es un literal que representa una referencia nula, uno que no se refiere a ningún objeto
Para tratar de que sea un poco Más claro en las versiones anteriores de C#, un tipo de valor no podía ser nulo, es decir, TENÍA que tener un valor, si no asignaba uno, obtenía un valor potencialmente aleatorio, algo así como:
int i;
i++;
console.writeline(i);
en las versiones anteriores de los objetos C# tenían que inicializarse, de lo contrario, eran nulas, lo que significaba que no tenían referencia a ningún objeto.
Ahora, con los tipos de valor que aceptan valores NULL en C# 2.0 + se puede tomar un int anulable lo que significa que si usted tiene este código:
int? i;
i++;
console.writeline(i);
realidad se va a obtener una excepción en i ++ porque nunca se ha inicializado a cualquier cosa que no sea nulo. Si null era 0, este código se ejecutaría bien porque simplemente evaluaría a 0 + 1, sin embargo, este es un comportamiento incorrecto.
Si nula fue siempre 0, y ha tenido aa int anulable, y escribió algo de código como:
int? i;
if (int == 0)
{
//do something
}
hay una posibilidad muy real de que podría obtener un comportamiento inesperado SI nula fue el mismo que 0, porque no hay forma de que el compilador pueda diferenciar entre el int que es nulo y el int que se establece explícitamente en 0.
Otro ejemplo que aclara las cosas en mi mente:
public int? AddNumbers(int? x, int? y)
{
if (x == null || y == null)
return null;
if (x == 0)
return y;
if (y == 0)
return x;
return x + y;
}
en este ejemplo, está claro que nulo y 0 son muy diferentes porque si tuviera que pasar en 0 para X o Y, y nula fue igual a 0, entonces el código anterior nunca llegaría a los controles para x == 0 o y == 0, sin embargo, si ejecuta el código y pasa 0 para x o y, los controles se ejecutarán.
Impresionante, esto es exactamente lo que estoy buscando. – Alex
Esto es todo sobre 'Nullable' - es * no * sobre referencias nulas. –
@Jon, ¿está diciendo que mi uso de la palabra "instancia" es impreciso? – RoadWarrior