IDодноразовая цепочка
-
20-09-2019 - |
Вопрос
Если я реализую объект с помощью IDisposable, должны ли все объекты, владеющие этим объектом, также реализовать его, даже если у них нет других ресурсов для освобождения?
Решение
Да.Вам необходимо избавиться от них, чтобы переменные-члены были правильно удалены.
Каждый раз, когда вы инкапсулируете класс IDisposable, вы должны сделать свой класс IDisposable.В методе Dispose вы должны удалить инкапсулированные ресурсы.По сути, относитесь к ним так же, как к родному ресурсу.
Другие советы
Если вы хотите детерминированное удаление, в конечном итоге какой-то клиент должен вызвать Dispose или обернуть вызовы в блок «using».Чтобы перейти к вашему объекту, может потребоваться, чтобы владелец также реализовал IDisposable.
Не следует полагаться на сборщик мусора для освобождения ресурсов, зависящих от времени.
Да, класс-владелец должен реализовывать IDisposable, но ему не нужен (не должен быть) финализатор (деструктор).
нет, им просто нужно использовать этот класс с оператором «using», чтобы убедиться, что они правильно размещают этот объект, но самим этим объектам не нужно реализовывать IDisplosable.