Ну, во-первых, я считаю важным отметить, что сборщик мусора и утилизация объектов / интерфейс IDisposable
полностью отделены друг от друга - в частности сборщик мусора никогда не удалит объект напрямую, вызвав метод Dispose
IDisposable
(если финализатор для этого объекта не сделает это сам).
Что касается того, когда вам следует удерживать IDisposable
, вы должны поддерживать ссылку на любой IDisposable
объект, который вам нуженраспоряжаться - звучит так, будто я констатирую очевидное, и это потому, что я есть!:-).Если время жизни одноразовых объектов не превышает одного метода, обычно используется ключевое слово using
:
using (var myDisposableObject = GetSomeDisposableObject())
{
myDisposableObject.DoThings();
}
Это ограничивает область действия myDisposableObject
(что помогает избежать попыток использовать объект, который был удален) и обеспечивает правильное удаление объекта, даже если выдается исключение.
Это может быть тем, что для определенного класса / API вам не нужно (или не должно быть)) распоряжаться объектом, который вам возвращен, однако полностью зависит от API / класса, который возвратил этот одноразовый объект.