Существует три сценария создания объекта IDisposable:
- Объект понадобится некоторое время, но не понадобится после выхода из текущего блока кода.
- Объект будет передан вызывающей стороне текущей подпрограммы, которая затем будет отвечать за него.
- Класс, отвечающий за объект IDisposable, сохраняет его в поле, чтобы он был доступен для использования в будущих вызовах методов / свойств.
В сценарии № 1 используйте блок «using» для создания объекта;его очистка будет выполняться автоматически.
В сценарии № 2 используйте блок try-finally с переменной «ok», для которой изначально установлено «False», но в конце «True»«попробуй» или перед любым возвратом;в конечном итоге, если «oK» равно false, вызовите Dispose, чтобы убедиться, что частично сконструированный объект очищен.
В сценарии № 3 сохраните объект в поле, как только он будет создан, и определитеМетод IDisposable.Dispose, который копирует значение в поле в переменную, обнуляет поле и, если переменная отлична от NULL, утилизирует его (если есть вероятность того, что несколько потоков вызывают Dispose одновременно, используйте Interlocked.Exchange для фиксациии очистить поле).Конструкторы также должны быть защищены, как если бы они работали в сценарии № 2.