c# - tipos - ¿Cuál es el valor predeterminado de un miembro en una matriz?
tipos de datos en c# (4)
De Arrays (Guía de Programación C #) :
El valor predeterminado de los elementos de matriz numérica se establece en cero y los elementos de referencia se establecen en nulo.
Yo instancia una matriz como esta:
int array[] = new int[4];
¿Cuáles son los valores predeterminados para esos cuatro miembros? ¿Es nulo, 0 o no existe?
El valor predeterminado de una variable inicializada automáticamente de tipo T
, como un elemento de matriz o un campo de instancia, es el mismo que el valor default(T)
. Para tipos de referencia y tipos de puntero, es nulo. Para los tipos numéricos, es el cero de ese tipo. Para bool, es falso. Para los tipos de estructura, es el valor de estructura que tiene todos sus campos inicializados a sus valores predeterminados.
Es 0. No puede ser nulo, ya que null no es un valor int
válido.
De la sección 7.6.10.4 de la especificación C # 5:
Todos los elementos de la nueva instancia de matriz se inicializan a sus valores predeterminados (§5.2).
Y de la sección 5.2:
El valor predeterminado de una variable depende del tipo de la variable y se determina de la siguiente manera:
- Para una variable de un tipo de valor, el valor predeterminado es el mismo que el valor calculado por el constructor predeterminado del tipo de valor (§4.1.2).
- Para una variable de un tipo de referencia, el valor predeterminado es nulo.
La inicialización a los valores predeterminados se realiza normalmente haciendo que el administrador de memoria o el recolector de basura inicialice la memoria a todos los bits cero antes de asignarla para su uso. Por esta razón, es conveniente utilizar todos los bits-cero para representar la referencia nula.
(Como detalle de la implementación, hay un poco de dificultad en el primer punto. Aunque C # en sí no le permite declarar un constructor sin parámetros para los tipos de valor, puede crear sus propios constructores sin parámetros para los tipos de valores en IL. No creo esos constructores son llamados en la inicialización de la matriz, pero serán llamados en una new X()
expresión new X()
en C #. Sin embargo, está fuera del ámbito de la especificación C #.
Los enteros no pueden ser NULL
. Tendrán el valor ''0''. Incluso si intenta asignar NULL
a un int
desde el código, no podrá hacerlo.