Quelle est la différence, s'il y en a une, entre un destructeur et une méthode Finalize dans une classe?
J'ai récemment découvert que Visual Studio 2008 considère un destructeur comme synonyme d'une méthode Finalize, ce qui signifie que Visual Studio ne vous permettra pas de définir simultanément les deux méthodes dans une classe.
Par exemple, le fragment de code suivant:
class TestFinalize
{
~TestFinalize()
{
Finalize();
}
public bool Finalize()
{
return true;
}
}
Donne l'erreur suivante sur l'appel à Finalize dans le destructeur:
L'appel est ambigu entre les méthodes ou propriétés suivantes: 'TestFinalize. ~ TestFinalize ()' et 'TestFinalize.Finalize ()'
Et si l'appel à Finalize est commenté, cela donne l'erreur suivante:
Le type 'ManagementConcepts.Service.TestFinalize' définit déjà un membre appelé 'Finalize' avec les mêmes types de paramètres
la source
Trouvé ici: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html
Mise à jour: Sujet semi-lié intéressant ici .
la source
You should only implement a Finalize method to clean up unmanaged resources
: vous le mettez dans Finalize. Pareil avec Dispose?Dispose
beaucoup plus que ceux où l'on devrait implémenter un finaliseur. ImplémenterDispose
s'il est probable qu'une instance de la classe ou d'une classe dérivée sera la dernière chose à posséder directement une ressource non gérée, ou à posséder directement la dernière chose à posséder directement une ressource non gérée, ou à posséder directement la dernière chose à posséder directement etc.Finalize
N'implémentez le nettoyage des ressources que si la classe <i> directement </i> possède une ressource non gérée <i> et presque rien d'autre </i> - un scénario beaucoup plus étroit.