Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Правильная реализация Dispose

Доброго времени суток! У меня есть такой вопрос. Допустим, у меня есть класс, реализующий интерфейс IDisposable. У этого класса есть какой-то управляемый ресурс, который тоже реализует этот интерфейс. Вот минимальный код моего класса.
class MyClass : IDisposable { private SomeContext _context = new SomeContext();
public void Dispose() { if(_context != null) _context.Dispose(); } }
И тут у меня возник вопрос. Насколько правильна эта реализация? Точнее насколько она неправильна и чем это грозит? (везде где смотрел я видел более сложную реализацию Dispose паттерна). Вроде бы имеется всего одно IDisposable поле (предполагается что оно корректно реализует этот паттерн в своих внутренностях), и чтобы освободить ресурс корректно, достаточно просто в нужное время вызвать метод Dispose для поля _context. В чем я не прав? Применима ли такая простая реализация на практикке и чем она вообще плоха?


Ответ

Да, в этой схеме всё верно. Неуправляемых ресурсов нет, финализатор не нужен. Dispose вызов прокидывает дальше, т. е. своё дело делает.
А вообще, рекомендую почитать: http://sergeyteplyakov.blogspot.ru/2011/09/dispose-pattern.html, особенно раздел Упрощенная версия Dispose паттерна, который очень похож на этот вопрос.

Комментариев нет:

Отправить комментарий