Если IDisposable
- это , реализованное правильно (с финализатором, который вызывает Dispose()
и не SuppressFinalize
), сборщик мусора в конечном итоге доберется до него.Тем не менее, using()
- это то же самое, что и try { ... } finally { object.Dispose(); }
, которое будет детерминировано (явно, как можно скорее).Если вы зависите от сборщика мусора, вы можете быть удивлены, сколько времени потребуется для его утилизации.Если есть неуправляемые ресурсы, вы можете быстро их исчерпать, потому что они не были освобождены.
Редактировать: Я пропустил суть этого в первый раз.Да, когда вы используете MyObject
, вы должны Dispose()
правильно с using()
.Если у вас есть другой код, который использует этот интерфейс, то вы можете получить что-то вроде:
public IMyContract GetInterface()
{
using (MyObject obj = new MyObject())
{
obj.DoSomething();
return (IMyContract)obj;
}
}
Остальная часть кода может затем использовать IMyContract contract = GetInterface();
, не беспокоясь о (или даже не зная), что вещи должны быть расположены.