Lanzar Finalizador de Clase C#

Fuentes


Un finalizador de clase, es una método que se ejecuta cuando el objeto es destruido, pero no por el usuario, si no por el GC.

En C# no existe el «destructor de clase».

Advertencia

Ver IDisposable(abajo) para hacer este tipo de cosas

Mi problema fue con un código como el siguiente

class Point
{
    public Point()
    {
        Console.WriteLine(1);
    }

    ~Point()
    {
        Console.WriteLine(2);
    }
}

class Program
{
    static void Main(string[] args)
    {
        Point p = new Point();
        p = null;
        Console.WriteLine(3);
    }
}

Resultado

1
3
2

En teoría, o según lo hace PHP, cuando se destruye un objeto (obj = null), o cuando finaliza por que ya no se referencia mas, el método __destruct() es llamado.

En C#, que se llama finalilzador, no hace lo mismo, al menos no cuando se destruye de manera explicita asignándole “null”.

Encontré en los comentarios un código, y al menos me hizo lo que esperaba que hiciera, que lanzara el finalizador en cuanto lo destruyera.

Point p = new Point();
p = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(3);

Ahora el resultado es

1
2
3

Interfaz IDisposable (Recomendado)

Otra manera, seria que la clase implemente la interfaz IDisposable con un único miembro Dispose, dentro del método se podrían añadir la limpieza necesaria de la clase.