2013-04-05 3 views
0

J'ai une classe qui a actuellement un finaliseur, mais qui n'a pas implémenté IDisposable. Microsoft indique que "Il s'agit d'un changement de version pour ajouter l'interface IDisposable à une classe existante, car elle modifie la sémantique de la classe". La classe doit-elle être "fixée" et implémentée IDisposable?Implémenter IDisposable sur une classe existante avec finaliseur

+0

Pourquoi devez-vous créer la classe 'IDisposable'? Avez-vous des ressources qui doivent être nettoyées tout de suite? – code4life

+0

Dans votre cas, combien de code va casser? Beaucoup de projets font des changements «techniquement» brisants qui n'affectent pas 99% des utilisateurs. Vous devez déterminer combien de choses vont réellement se casser après le changement pour évaluer correctement le risque/la récompense du changement. – ken

Répondre

0

Si vous contrôlez tout le code qui utilise cette classe, vous pouvez le faire et mettre à jour le code pour appeler Dispose. Sinon, ce n'est pas une bonne idée, car le code externe existant n'appelle pas votre Dispose().

0

Si vous ajoutez IDisposable, vous devez ajouter du code pour appeler la méthode dispose() dans tout le code qui instancie votre classe. Si tout le code qui appelle/instancie votre classe n'est pas géré par vous, cela peut ne pas être facile et conduire à des objets non-disposés.

0

Cela dépend, mais fondamentalement non. Le finaliseur est simplement une méthode de nettoyage appelée pour libérer de la mémoire, il n'y a aucune promesse implicite qu'il sera appelé en consommant du code. IDisposable indique au monde que la méthode DISPOS doit être appelée pour une instance de la classe, même en cas d'erreur. Si cela décrit votre code, il aurait dû être jetable en premier lieu, alors la réponse serait oui. Si c'est le cas cependant, vous devrez changer tout le code qui consume votre classe pour s'assurer qu'ils appellent jetable.

Questions connexes