Два вопроса о Dispose () и деструкторах в C #

У меня вопрос о том, как использовать 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) on Dispose ()

Когда программист использует с помощью или вызывает Dispose () Очевидно, наш класс вызывает GC.SupressFinalize (this) . Вот мой вопрос:

  • Что это означает? Будет ли объект собран, но без вызова деструктора ?. Я предполагаю, что ответ - да, поскольку деструкторы преобразуются фреймворком в вызов Finalize (), но я не уверен.

Завершение без вызова Dispose ()

Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()

  • Почему мы не уничтожаем ресурс на этом этапе? Другими словами, почему мы не можем освободить ресурсы в деструкторе?
  • Какой код должен выполняться внутри if, а какой снаружи?

     if (! _Disposed) // удаляем только один раз! Я предполагаю, что ответ - да, поскольку  деструкторы  преобразуются фреймворком в вызов Finalize (), но я не уверен. 

Завершение без вызова Dispose ()

Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()

  • Почему мы не уничтожаем ресурс на этом этапе? Другими словами, почему мы не можем освободить ресурсы в деструкторе?
  • Какой код должен выполняться внутри if, а какой снаружи?

     if (! _Disposed) // удаляем только один раз! Я предполагаю, что ответ - да, поскольку  деструкторы  преобразуются фреймворком в вызов Finalize (), но я не уверен. 

Завершение без вызова Dispose ()

Предположим, что Сборщик мусора собирается очистить наш объект, но программист не вызвал Dispose ()

  • Почему мы не уничтожаем ресурс на этом этапе? Другими словами, почему мы не можем освободить ресурсы в деструкторе?
  • Какой код должен выполняться внутри if, а какой снаружи?

     if (! _Disposed) // удаляем только один раз!
    {
     если (утилизация)
     {
     // Что мне здесь делать и почему?
     }
     // А что здесь и почему?
    }
    

Заранее спасибо

16
задан Daniel Peñalba 29 April 2011 в 08:40
поделиться