IDisposable цепь - PullRequest
       30

IDisposable цепь

5 голосов
/ 31 августа 2009

Если я реализую объект с помощью IDisposable, все объекты, владеющие этим объектом, должны также его реализовывать, даже если у них нет других ресурсов для освобождения?

Ответы [ 4 ]

12 голосов
/ 31 августа 2009

Да. Вам нужно избавиться от них, чтобы ваши переменные-члены правильно располагались.

Каждый раз, когда вы инкапсулируете класс IDisposable, вы должны сделать свой класс IDisposable. В вашем методе Dispose вы должны утилизировать инкапсулированные ресурсы. По сути, относитесь к ним так же, как к собственному ресурсу.

1 голос
/ 31 августа 2009

Нет, им просто нужно использовать этот класс с оператором "using", чтобы убедиться, что они правильно располагают этот объект, но сами эти объекты не должны реализовывать IDisplosable

1 голос
/ 31 августа 2009

Да, класс-владелец должен реализовывать IDisposable, но ему не нужен (не должен быть) финализатор (деструктор).

1 голос
/ 31 августа 2009

Если вам нужно детерминированное удаление, в конечном счете, некоторые клиенты должны вызвать Dispose или заключить вызовы в блок «using». Чтобы просочиться к вашему объекту, может потребоваться, чтобы владелец также реализовал IDisposable.

Вы не должны полагаться на сборщик мусора для освобождения ресурсов, зависящих от времени.

...