У меня вопрос, как использовать 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 (это) в Dispose ()
Когда программист использует using
или явно вызывает Dispose (), наш класс вызывает GC.SupressFinalize(this)
. Вот мой вопрос:
- Что именно это означает? Будет ли объект собираться, но без вызова деструктора ?. Я предполагаю, что ответ - да, поскольку деструкторы преобразуются фреймворком в вызов Finalize (), но я не уверен.
Завершение без вызова Dispose ()
Предположим, что сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose()
- Почему бы нам не избавиться от ресурса на этом этапе? Другими словами, почему мы не можем освободить ресурсы на деструкторе?
Какой код нужно выполнить в if внутри, а какой снаружи?
if (!_disposed) // only dispose once! { if (disposing) { //What should I do here and why? } // And what here and why? }
заранее спасибо
SafeHandle
, а для управляемых ресурсов обычно не требуется финализатор. - person CodesInChaos   schedule 06.01.2011