Доброго времени суток! У меня есть такой вопрос. Допустим, у меня есть класс, реализующий интерфейс 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 паттерна, который очень похож на этот вопрос.
Комментариев нет:
Отправить комментарий