Si j'implémente un objet avec IDisposable, tous les objets qui possèdent cet objet doivent-ils également l'implémenter, même s'ils n'ont pas d'autres ressources à libérer?Chaîne IDisposable
Répondre
Oui. Vous devez en disposer pour que vos variables membres soient correctement éliminées.
Chaque fois que vous encapsulez une classe IDisposable, vous devez rendre votre ID de classepossible. Dans votre méthode Dispose, vous devez disposer de vos ressources encapsulées. Fondamentalement, traitez-les de la même manière que vous traiteriez une ressource native.
Si vous souhaitez une élimination déterministe, un client doit finalement appeler Dispose ou encapsuler les appels dans un bloc «using». Pour arriver à votre objet, cela peut nécessiter que le propriétaire implémente IDisposable.
Vous ne devriez pas compter sur le garbage collector pour libérer des ressources dépendant du temps.
Ce n'est pas vraiment un problème de ressources non managées. Les objets qui possèdent une ressource non gérée vont 1) utiliser 'SafeHandle's ou 2) utiliser un finaliseur défini par l'utilisateur pour libérer les ressources non managées. Bien que cela ne soit pas déterministe, le garbage collector * est capable de libérer correctement les ressources non managées. Le principal avantage des bonnes chaînes 'IDisposable' est la" fermeture ", la" fin "ou la" libération "des ressources sensibles au problème, comme (mais sans s'y limiter) les E/S. –
Noté. Merci. –
Oui, une classe propriétaire doit implémenter IDisposable mais elle n'a pas besoin (ne devrait pas avoir) de Finalizer (destructeur).
nop, ils ont juste besoin d'utiliser cette classe avec un « en utilisant » déclaration pour vous assurer qu'ils disposent cet objet correctement, mais ces objets eux-mêmes ne pas besoin de mettre en œuvre IDisplosable
Si une autre classe possède un objet jetable, elle doit également implémenter IDisposable. Sinon, la classe propriétaire n'a aucun moyen de permettre aux appelants d'en disposer, et par conséquent, les ressources disponibles dont elle dispose en interne. –
cela dépend simplement de la façon dont la classe utilise l'objet en interne – BlackTigerX
J'utilise le mot "propre" spécifiquement pour signifier "a une variable membre du type spécifié", donc non cela ne fonctionne pas. J'utilise le travail "use" pour ce dont tu parles. –
- 1. IDisposable
- 2. IDisposable Winform
- 3. ASP.NET MVC et Idisposable
- 4. EntLib IDisposable conversion
- 5. XmlReader et IDisposable
- 6. Winforms Disposing IDisposable
- 7. StructureMap InstanceScope.Hybrid et IDisposable
- 8. Cette implémentation IDisposable est-elle correcte?
- 9. Session contenant des éléments implémentant IDisposable
- 10. Les objets IDisposable dans HttpContext.Current.Session sont-ils disposés sur Application_End?
- 11. DI: Gestion de la vie des objets IDisposable
- 12. Comment ajouter un objet IDisposable + delegate à une classe existante
- 13. Comment savoir si une référence d'objet IDisposable est supprimée?
- 14. comment mettre en place un IEnumerable <IDisposable>
- 15. IUsable: le contrôle des ressources d'une meilleure façon que IDisposable
- 16. Comment IDisposable est-il implémenté sur FileStream dans .Net 1.1
- 17. Classe de base IDisposable qui possède une ressource jetable gérée, que faire dans les sous-classes?
- 18. C# LINQ-à-Sql - Si datacontext être débarrassées en utilisant IDisposable
- 19. Quand avez-vous besoin d'appeler IDisposable, si vous utilisez des instructions `using`?
- 20. Comment puis-je disposer un objet IDisposable si l'instruction using renvoie une exception?
- 21. Quand dois-je éliminer les commandes manuellement? Comment savoir si un contrôle implémente IDisposable?
- 22. Chaîne à l'intérieur d'une chaîne
- 23. Fonction chaîne de sous-chaîne
- 24. Regex pour trouver chaîne à l'intérieur chaîne à l'intérieur chaîne
- 25. sur la comparaison chaîne avec chaîne
- 26. Obtention d'une chaîne aléatoire dans une chaîne
- 27. asp.net Convertir une chaîne CSV en chaîne []
- 28. Trouver une chaîne dans une chaîne
- 29. Chaîne d'entrée compressée sous forme de chaîne
- 30. Préfixer une chaîne à une autre chaîne
Seulement vous ne pouvez pas assumer l'ordre dans lequel les objets sont disposés, s'ils sont induits par le filetage du finisseur GC. –
Oui, mais je ne suis pas sûr de savoir comment cela est pertinent. Si vous enveloppez votre classe et la rendez disponible, vous pouvez contrôler l'ordre dans lequel chaque ressource encapsulée est éliminée. –