Qual é a diferença, se houver, entre um destruidor e um método Finalize em uma classe?
Recentemente, descobri que o Visual Studio 2008 considera um destrutor sinônimo de um método Finalize, o que significa que o Visual Studio não permitirá que você defina simultaneamente os dois métodos em uma classe.
Por exemplo, o seguinte fragmento de código:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Fornece o seguinte erro na chamada para Finalize no destruidor:
A chamada é ambígua entre os seguintes métodos ou propriedades: 'TestFinalize. ~ TestFinalize ()' e 'TestFinalize.Finalize ()'
E se a chamada para Finalize for comentada, ocorrerá o seguinte erro:
O tipo 'ManagementConcepts.Service.TestFinalize' já define um membro chamado 'Finalize' com os mesmos tipos de parâmetro
fonte
Encontrado aqui: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Atualização: Tópico semi-relacionado interessante aqui .
fonte
You should only implement a Finalize method to clean up unmanaged resources
: você coloca em Finalizar. Mesmo com Dispose?Dispose
superam amplamente aqueles em que se deve implementar um finalizador. ImplementeDispose
se for provável que uma instância da classe ou classe derivada seja a última coisa a possuir diretamente um recurso não gerenciado, ou a última coisa a possuir diretamente um recurso não gerenciado, ou a propriedade direta a última coisa a possuir diretamente etc. Apenas implementeFinalize
para limpeza de recursos se a classe de alguém <i> diretamente </i> possuir um recurso não gerenciado <i> e quase nada mais </i> - um cenário muito mais restrito.