У меня вопрос о том, как использовать 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);
}
}
Когда программист использует с помощью
или вызывает Dispose () Очевидно, наш класс вызывает GC.SupressFinalize (this)
. Вот мой вопрос:
Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()
Какой код должен выполняться внутри if, а какой снаружи?
if (! _Disposed) // удаляем только один раз! Я предполагаю, что ответ - да, поскольку деструкторы преобразуются фреймворком в вызов Finalize (), но я не уверен.
Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()
Какой код должен выполняться внутри if, а какой снаружи?
if (! _Disposed) // удаляем только один раз! Я предполагаю, что ответ - да, поскольку деструкторы преобразуются фреймворком в вызов Finalize (), но я не уверен.
Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()
Какой код должен выполняться внутри if, а какой снаружи?
if (! _Disposed) // удаляем только один раз!
{
если (утилизация)
{
// Что мне здесь делать и почему?
}
// А что здесь и почему?
}
Заранее спасибо