¿Cuál es la diferencia, si la hay, entre un destructor y un método Finalize en una clase?
Recientemente descubrí que Visual Studio 2008 considera un destructor sinónimo de un método Finalize, lo que significa que Visual Studio no le permitirá definir simultáneamente ambos métodos en una clase.
Por ejemplo, el siguiente fragmento de código:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Da el siguiente error en la llamada a Finalizar en el destructor:
La llamada es ambigua entre los siguientes métodos o propiedades: 'TestFinalize. ~ TestFinalize ()' y 'TestFinalize.Finalize ()'
Y si se comenta la llamada a Finalizar, da el siguiente error:
El tipo 'ManagementConcepts.Service.TestFinalize' ya define un miembro llamado 'Finalizar' con los mismos tipos de parámetros
fuente
Encontrado aquí: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Actualización: Interesante hilo semi relacionado aquí .
fuente
You should only implement a Finalize method to clean up unmanaged resources
: lo pones en Finalizar. ¿Lo mismo con Dispose?Dispose
los que uno debería implementar un finalizador superan ampliamente a aquellos en los que debería implementar un finalizador. ImplementarDispose
si es probable que una instancia de la clase o una clase derivada sea lo último en poseer directamente un recurso no administrado, o poseer directamente lo último que posea directamente un recurso no administrado, o poseer directamente lo último que posea directamente etc. Solo implementeFinalize
para la limpieza de recursos si la clase de uno <i> directamente </i> posee un recurso no administrado <i> y casi nada más </i> - un escenario mucho más limitado.