Saltar al contenido

Diferencia entre el método destructor, dispose y finalize

Esta es la contestación más completa que encomtrarás brindar, sin embargo estúdiala pausadamente y analiza si se adapta a tu trabajo.

Solución:

Destructor llama implícitamente al método Finalize, técnicamente son lo mismo. Dispose está disponible con objetos que implementan la interfaz IDisposable.

Puede ver: Destructores C# – MSDN

El destructor llama implícitamente a Finalize en la clase base del objeto.

Ejemplo del mismo enlace:

class Car

    ~Car()  // destructor
    
        // cleanup statements...
    

El código del Destructor se traduce implícitamente al siguiente código:

protected override void Finalize()

    try
    
        // Cleanup statements...
    
    finally
    
        base.Finalize();
    

Tu interpretación del Destructor es correcta:

Desde MSDN

El el programador no tiene control sobre cuándo se llama al destructor porque esto lo determina el recolector de basura. El recolector de elementos no utilizados comprueba los objetos que la aplicación ya no utiliza. Si considera que un objeto puede ser destruido, llama al destructor (si lo hay) y recupera la memoria utilizada para almacenar el objeto. Los destructores también se llaman cuando el programa sale. Es posible forzar la recolección de basura llamando a Collect, pero la mayoría de las veces, esto debe evitarse porque puede crear problemas de rendimiento.

En términos de C#, un destructor y un finalizador son básicamente conceptos intercambiables y deben usarse para liberar no administrado recursos cuando se recopila un tipo, por ejemplo, identificadores externos. Está muy raro que necesite escribir un finalizador.

El problema con eso es que GC no es determinista, por lo que el Dispose() método (a través de IDisposable) permite apoyar determinista limpiar. Esto no está relacionado con la recolección de basura y permite que la persona que llama libere cualquier recurso cuanto antes. También es adecuado para usar con administrado recursos (además de los no administrados), por ejemplo, si tiene un tipo que encapsula (digamos) una conexión de base de datos, es posible que desee deshacerse del tipo para liberar la conexión también.

valoraciones y comentarios

Ten en cuenta mostrar este escrito si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *