Если я реализую объект с IDisposable, должны ли все объекты, которые владеют этим объектом, реализовать его, даже если у них нет других ресурсов для выпуска?IDisposable chain
ответ
Да. Вы должны избавиться от них, чтобы ваши переменные-члены были правильно настроены.
Каждый раз, когда вы инкапсулируете класс IDisposable, вы должны сделать свой класс IDisposable. В методе Dispose вы должны использовать свои инкапсулированные ресурсы. В принципе, относитесь к ним так же, как и к родному ресурсу.
Если вы хотите детерминированное удаление, в конечном счете, какой-то клиент должен вызвать Dispose или обернуть вызовы в блоке «using». Чтобы просочиться к вашему объекту, это может потребовать, чтобы владелец также реализовал IDisposable.
Вы не должны полагаться на сборщик мусора, чтобы освобождать ресурсы, зависящие от времени.
Это не проблема неуправляемых ресурсов. Объекты, которые владеют неуправляемым ресурсом, будут: 1) использовать 'SafeHandle' или 2) использовать пользовательский финализатор для освобождения неуправляемых ресурсов. Хотя это не является детерминированным, сборщик мусора * способен правильно освобождать неуправляемые ресурсы. Основным преимуществом правильных цепочек «IDisposable» является своевременное «закрытие», «конец» или «выпуск» ресурсов, чувствительных к проблеме, таких как (но определенно не ограничиваясь) ввода-вывода. –
Отмечено. Благодарю. –
Да, владеющий класс должен реализовывать IDisposable, но он не нуждается (не должен иметь) Finalizer (деструктор).
NOP, они просто должны использовать этот класс с «помощью» заявление, чтобы убедиться, что они располагают этот объект должным образом, но эти объекты сами по себе не должны реализовать IDisplosable
Если другому классу принадлежит одноразовый объект, он должен также реализовать IDisposable. В противном случае у владеющего класса нет возможности разрешить вызывающим абонентам распоряжаться им и, следовательно, располагаемым ресурсам, которыми он владеет внутри страны. –
это зависит только от того, как класс использует объект внутри. – BlackTigerX
Я использую слово «собственный» специально для обозначения «имеет переменную-член указанного типа», так что это не работает. Я использую работу «использует» для того, о чем вы говорите. –
- 1. Chain Observables
- 2. Использование IDisposable
- 3. Реализация IDisposable
- 4. Selenium/WebdriverJs/Protractor chain chain with page objects
- 5. chain string expression linq
- 6. Chain Commands in C#
- 7. Commons Chain Развертывание
- 8. Promise chain break
- 9. Chain custom javascript функции
- 10. Chain CollectionChanged Events
- 11. js метод chain tail
- 12. Chain should_receive Возможно?
- 13. _.chain - подчеркивают JS
- 14. Symfony Routing Fallback Chain
- 15. SSL Chain Incomplete
- 16. Chain стиля HTML разметка
- 17. Chain суммирования в Excel
- 18. JQuery. Then chain behavior
- 19. Android Chain Animations
- 20. Android Handler Chain NullPointerException
- 21. Mocking prom chain function
- 22. F # Regex matching chain
- 23. Цепь ответственности Dynamic Chain
- 24. meteorjs scss @import chain
- 25. PayPal Delayed Chain Payment
- 26. Chain Lambda Linq
- 27. JQuery Ajax анимация Chain
- 28. Neo4j Certificate Chain
- 29. Mysql Chain Select Query
- 30. Angular2 Component Input Chain
Только вы не можете установить порядок, в котором объекты будут удалены, если они вызваны потоком финализатора GC. –
Правда, но я не уверен, насколько это актуально. Если вы завершаете свой класс и делаете его одноразовым, вы можете управлять порядком, в котором размещается каждый инкапсулированный ресурс. –