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
Répondre
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().
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.
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.
- 1. Une classe avec un membre Thread doit-elle implémenter IDisposable?
- 2. Comment ajouter un objet IDisposable + delegate à une classe existante
- 3. Dois-je implémenter IDisposable sur toutes les classes, ou une classe de base est-elle suffisante?
- 4. Devrais-je implémenter GC.SupressFinalize sur IDisposable AND Finalize?
- 5. Comment puis-je tester un finaliseur?
- 6. IDisposable - la bonne implémentation (C#)
- 7. ConflictingBeanDefinitionException avec une classe non existante
- 8. EntityFramework donne une erreur IDisposable
- 9. C# - Comment implémenter IEnumerator sur une classe
- 10. Implémenter IExtensibleDataObject sur une classe de base
- 11. IDisposable
- 12. Détails sur l'héritage de IDisposable?
- 13. Pourquoi est-ce que je reçois CA2000 avec un membre privé IDisposable dans ma classe IDisposable?
- 14. Ajout d'une propriété à une classe existante
- 15. IDisposable Winform
- 16. Comment implémenter LogAttribute personnalisé sur une classe
- 17. Le référentiel Linq to SQL doit-il implémenter IDisposable?
- 18. Pourquoi IDisposable est une interface, pas une classe abstraite?
- 19. JOOQ Créer une table basée sur une classe existante?
- 20. C# Objet IDisposable pour toute la classe
- 21. Est-il correct d'implémenter IDisposable sur Singleton?
- 22. Implémentation d'IDisposable sur une classe scellée
- 23. Dois-je implémenter IDisposable pour un contrôle utilisateur?
- 24. Comment implémenter une classe d'association?
- 25. Nettoyage avec des problèmes IDisposable
- 26. Comment implémenter le son dans une application existante, sans Cocos2D
- 27. IDisposable Question
- 28. Pour implémenter le tiroir de navigation dans une application existante
- 29. Comment implémenter une interface sur une classe Java protégée
- 30. Pouvez-vous implémenter une interface sur une classe Linq2Sql?
Pourquoi devez-vous créer la classe 'IDisposable'? Avez-vous des ressources qui doivent être nettoyées tout de suite? – code4life
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