Si implemento un objeto con IDisposable, ¿deberían implementarlo también todos los objetos que poseen ese objeto, incluso si no tienen otros recursos para liberar?IDisposable chain
Respuesta
Sí. Debe deshacerse de ellos para que sus variables miembro se eliminen correctamente.
Cada vez que encapsula una clase IDisposable, debe hacer que su clase sea IDisposable. En su método Dispose, debe disponer de sus recursos encapsulados. Básicamente, trátelos de la misma manera que tratarías un recurso nativo.
Si desea una eliminación determinista, en última instancia, algún cliente necesita llamar a Dispose o envolver las llamadas en un bloque "using". Para llegar hasta su objeto, puede ser necesario que el propietario implemente IDisposable también.
No debe confiar en el recolector de basura para liberar recursos dependientes del tiempo.
Esto no es realmente un problema de recursos no administrados. Los objetos que poseen recursos no administrados 1) usan 'SafeHandle's o 2) usan un finalizador definido por el usuario para liberar los recursos no administrados. Si bien esto no es determinista, el recolector de basura * * puede liberar adecuadamente los recursos no administrados. El principal beneficio de las cadenas apropiadas de 'IDisposable' es el "cierre", el "final" o la "liberación" oportuna de los recursos sensibles al problema, como (pero definitivamente no limitado a) la E/S. –
observado. Gracias. –
Sí, una clase propietaria debe implementar IDisposable pero no necesita (no debería tener) un Finalizer (destructor).
nop, que sólo tiene que utilizar esa clase con un "por medio de" declaración para asegurarse de que disponen de ese objeto correctamente, pero esos objetos en sí no es necesario para poner en práctica IDisplosable
Si otra clase posee un objeto desechable, también debe implementar IDisposable. De lo contrario, la clase propietaria no tiene forma de permitir que los emisores de llamadas se deshagan de ella, y en consecuencia, los recursos disponibles que posee internamente. –
solo depende de cómo la clase usa el objeto internamente – BlackTigerX
Uso la palabra "propio" específicamente para significar "tiene una variable miembro del tipo especificado", así que no, esto no funciona. Uso el trabajo "usos" para lo que estás hablando. –
- 1. Android Chain Animations
- 2. django chain select
- 3. Markov Chain Text Generation
- 4. WCF Certificate Chain, verifique programáticamente
- 5. Cross Platform C++ Tool Chain
- 6. IDisposable Pregunta
- 7. Método de recopilación de Chain Backbone.js
- 8. IDisposable GC.SuppressFinalize (esta) ubicación
- 9. ¿Debo implementar IDisposable aquí?
- 10. IDisposable, ¿realmente importa
- 11. StructureMap InstanceScope.Hybrid y IDisposable
- 12. ¿Para qué es IDisposable?
- 13. Autofac y IDisposable interfaz
- 14. aplicación explícita de IDisposable
- 15. ¿Cuándo debería implementar IDisposable?
- 16. Finalizador e IDisposable
- 17. C# IDisposable Uso: Mejores prácticas
- 18. ¿Debería instalarse IDisposable en cascada?
- 19. Herencia de interfaz con IDisposable?
- 20. ¿Por qué Enumerable.Range Implement IDisposable?
- 21. Colección estándar para objetos IDisposable
- 22. C# use IDisposable o SafeHandle?
- 23. ¿Cómo concilia IDisposable e IoC?
- 24. IDisposable en un repositorio inyectada
- 25. System.Net.HttpListener solo implementa explícitamente IDisposable
- 26. ¿Cómo funciona la interfaz IDisposable?
- 27. C# Linq Seleccione el problema en Method Chain
- 28. aps_developer_identity.cer a p12 sin tener que exportar desde Key Chain?
- 29. ¿Por qué estoy recibiendo CA2000 con un miembro privado IDisposable dentro de mi clase IDisposable?
- 30. Implementando IDisposable en una subclase cuando el padre también implementa IDisposable
Sólo que no se puede asumir el orden en que los objetos se eliminan, si son inducidos por el hilo del finalizador GC. –
Es cierto, pero no estoy seguro de cómo esto es relevante. Si ajusta su clase y la hace desechable, PUEDE controlar el orden en que se dispone cada recurso encapsulado. –