Al instanciar
objetos de
clases derivadas se inicia una
cadena de invocaciones a constructores en las cuales el constructor de la clase
derivada, antes de realizar sus propias tareas, invoca (ya sea implícita o
explícitamente) al constructor de su clase base. Similarmente, si la clase base
fue derivada de otra clase, el constructor de la clase base debe invocar al
constructor de la clase ubicada en el siguiente nivel superior de la jerarquía,
y así sucesivamente. El último constructor invocado en la cadena es el
constructor de la clase Object, cuyo cuerpo se ejecuta primero. El cuerpo del
constructor de la clase derivada se ejecuta al final. El constructor de cada
clase base inicializa las variables de instancia que el objeto de la clase
derivada hereda.
Destructores en clases derivadas
Cuando remueve
de la memoria un objeto de una clase derivada, el
recolector de basura invoca al destructor del objeto. Esto inicia una cadena de
invocaciones a destructores, en donde el destructor de la clase derivada y los
destructores de las clases bases directas e indirectas se ejecutan en orden
inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el
destructor de la clase derivada y al final se ejecuta el destructor de la clase
base ubicada en el nivel superior de la jerarquía. La ejecución de los
destructores debe liberar todos los recursos que el objeto adquirió, antes de
que el recolector de basura reclame la memoria de ese objeto. Cuando el
recolector de basura invoca al destructor de un objeto de una clase derivada,
ese destructor realiza su tarea y después invoca al destructor de la clase base.
El proceso se repite hasta que se invoca al destructor de la clase
Object.
Ejemplo:
// Destruct Derivadas?.cs : Destructores en clases derivadas. using
// Destruct Derivadas?.cs : Destructores en clases derivadas. using
C =
System.Console;
class Animal {
Animal( ) {
C.Write
Line?(“Muere mi
parte Animal …”);
}
}
class Mamífero
: Animal {
Mamífero( ){
C.Write
Line(“Muere mi parte Mamífero …”);
} }
class Perro :
Mamífero {
Perro( ) {
C.Write
Line(“Muere mi parte Perro …”);
} }
public class Principal {
static void Main( ) {
Perro Fido = new Perro ( );
}
}
No hay comentarios:
Publicar un comentario