У меня вопрос о том, как использовать Dispose()
и деструкторы. Читая несколько статей и документацию MSDN , это, по-видимому, является рекомендуемым способом реализации Dispose()
и деструкторов.
Но у меня есть два вопроса об этой реализации, которые вы можете прочитать ниже:
class Testing : IDisposable
{
bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed) // only dispose once!
{
if (disposing)
{
// Not in destructor, OK to reference other objects
}
// perform cleanup for this object
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
// tell the GC not to finalize
GC.SuppressFinalize(this);
}
~Testing()
{
Dispose(false);
}
}
GC.SupressFinalize(this) на Dispose()
Когда программист использует using
или вызывает функцию Dispose(), наш класс вызывает GC.SupressFinalize(this)
. Мой вопрос здесь:
- Что это значит? Будет ли собираться объект, но без вызова деструктора?. Я полагаю, что ответ на вопрос "да", поскольку деструкторы преобразуются каркасом в вызов Finalize(), но я не уверен.
Завершение без вызова Dispose()
Предположим, что GC собирается очистить наш объект, но программист не вызвал Dispose()
- Почему мы не располагаем ресурсами на этом этапе? Другими словами, почему мы не можем освобождать ресурсы от деструктора?
-
Какой код должен быть выполнен в if, внутри и вне?
if (!_disposed) // only dispose once! { if (disposing) { //What should I do here and why? } // And what here and why? }
Заранее спасибо