es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo sabe un tipo de valor que contiene una dirección de memoria para un tipo de referencia que solo debe contener el tipo de referencia declarado?

Estoy aprendiendo por mi cuenta sobre cómo se trata a los tipos de referencia y valor en tiempo de compilación y tiempo de ejecución. Esperaba poder obtener alguna entrada / retroalimentación sobre mi comprensión del siguiente ejemplo simple.

clase Animal
{
   string nombre;
}

clase pública Programa
{
   público estático vacío Principal()
   {
       Animal A; // Línea 1
       A = new Animal(); // Línea 2
   }
}

Entiendo que en la Línea 1 el compilador crea memoria en el stack, es decir, A, para almacenar una referencia a una instancia de Animal (en el montón). En la línea 2 se realiza una operación por el tiempo de ejecución que crea una instancia de Animal (realmente solo una cadena) y asigna su dirección de memoria a A. Por favor, corríjame si me equivoco en algo aquí.

Y también entiendo que si simplemente estaba asignando el número 5 a un int declarado, esto está bien ya que el compilador ha creado un diseño de memoria capaz de almacenar un int.

Pero para un tipo de referencia como se muestra arriba, por lo que entiendo que el compilador está creando un diseño de memoria en el stack capaz de almacenar una dirección de memoria, es decir, A, a una instancia de Animal en el montón.

Sé que declaramos A como un Animal, pero mi pregunta es, ¿qué hay en A que lo hace solo capaz de almacenar una dirección de memoria de un Animal o una instancia de clase derivada de Animal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Tu comprensión es correcta.

    Cuando declaras Animal A en la Línea 1, el compilador crea un diseño de memoria en la pila capaz de almacenar una dirección de memoria a una instancia de Animal en el heap. Esto se debe a que Animal es un tipo de referencia, y el diseño de memoria creado en la pila es una referencia a la instancia de Animal en el heap.

    Cuando asignas A = new Animal() en la Línea 2, el tiempo de ejecución crea una instancia de Animal (realmente solo una cadena) y le asigna su dirección de memoria a A.

    Cuando asignas el número 5 a un int declarado, el compilador crea un diseño de memoria capaz de almacenar un int. Esto se debe a que int es un tipo de valor, y el diseño de memoria creado en la pila es el valor real del int.

Comments are closed.