Просто чтобы уточнить: IDisposable
не о сборке мусора, а о более широкой теме управления ресурсами.Простым примером может быть SqlConnection
, который предназначен для освобождения соединения с базой данных.Объект SqlConnection
по-прежнему находится в памяти и собирается после того, как выходит из области видимости.
Это не поможет решить проблему «один экземпляр на домен приложения», поскольку время жизниобъект не контролируется вами.В лучшем случае вы можете иметь один неразмещенный объект.
Оператор using
фактически является блоком try-finally
, где всегда выполняется finally
, чтобы убедиться, что объект удален.
Этот код:
using(var disposable = new DisposableObject())
{
...
}
по сути эквивалентен этому коду:
var disposable = new DisposableObject();
try
{
...
}
finally
{
disposable?.Dispose();
}
Утилита всегда вызывается, если ссылка на объект не потеряна.