2010-05-28 11 views
7

Simplemente curioso.Valor de variable no anulable no asignada (C#)

si vas:

string myString; 

Su valor es nulo.

Pero si vas:

int myInt; 

¿Cuál es el valor de esta variable en C#?

Gracias

David

+2

Una simple prueba sería suficiente para que usted responda esto usted mismo. – spender

+4

Creo que la calidad de las respuestas ha demostrado el valor de la pregunta. – David

Respuesta

26

En primer lugar, tenga en cuenta que esto solo se aplica a los campos, no a las variables locales; no se pueden leer hasta que se hayan asignado, al menos dentro de C#. De hecho, el CLR inicializa los marcos de pila en 0 si tiene un conjunto de banderas apropiado, que creo que es por defecto. Sin embargo, rara vez es observable, tienes que pasar por algunos hackers.

El valor predeterminado de int es 0 - y para cualquier tipo, es esencialmente el valor representado por un patrón de bits lleno de ceros. Para un tipo de valor, esto es equivalente a llamar al constructor sin parámetros, y para un tipo de referencia es nulo.

Básicamente, el CLR limpia la memoria con ceros.

Este es también el valor dado por default(SomeType) para cualquier tipo.

+1

+1 para proporcionar la mecánica de fondo. – RedFilter

+1

y +1 para la distinción campo/variable – Blorgbeard

+0

Cuando escribí la pregunta quise decir variable local en lugar de campo, pero como no estaba al tanto de la distinción al respecto, no lo dejé claro. No sabía que los campos int se inicializaron en cero, gracias por esa información. – David

5

por defecto de int es 0

2

Cadena es un tipo de referencia. Int es un tipo de valor. Los tipos de referencia son simplemente un puntero en la pila dirigida al montón, que puede contener o no un valor. Un tipo de valor es solo el valor en la pila, pero siempre debe establecerse en algo.

1

El valor de una variable unitaria del tipo T siempre es default(T). Para todos los tipos de referencia, esto es nulo, y para los tipos de valores, vea el enlace que @Blorgbeard publicó (o escriba algún código para verificarlo).

Cuestiones relacionadas