c# финализатор финализаторы - В C # какова разница между деструктором и методом Finalize в классе?




1 Answers

В Википедии есть хорошее обсуждение разницы между финализатором и destructor в статье finalizer .

C # действительно не имеет «истинного» деструктора. Синтаксис напоминает деструктор C ++, но он действительно является финализатором. Вы правильно написали это в первой части вашего примера:

~ClassName() { }

Вышеупомянутый синтаксический сахар для функции Finalize . Это гарантирует, что финализаторы в базе гарантированно будут работать, но в остальном идентичны переопределению функции Finalize . Это означает, что когда вы пишете синтаксис деструктора, вы действительно пишете финализатор.

Согласно Microsoft , финализатор ссылается на функцию, которую собирает сборщик мусора, когда он собирает ( Finalize ), в то время как деструктор - это ваш бит кода, который выполняется в результате (синтаксический сахар, который становится Finalize ). Они настолько близки к тому, что Microsoft никогда не проводила различия.

Использование Microsoft термина «деструктор» в C ++ вводит в заблуждение, поскольку в C ++ он выполняется в том же потоке, как только объект удаляется или удаляется из стека, а в C # он выполняется в отдельном потоке в другое время.

java idisposable dispose

В чем разница, если таковая существует, между деструктором и методом Finalize в классе?

Недавно я обнаружил, что Visual Studio 2008 считает деструктор синонимом метода Finalize, что означает, что Visual Studio не позволит вам одновременно определять оба метода в классе.

Например, следующий фрагмент кода:

class TestFinalize
{
    ~TestFinalize()
    {
        Finalize();
    }

    public bool Finalize()
    {
        return true;
    }
}

Дает следующую ошибку при вызове Finalize в деструкторе:

Вызов неоднозначен между следующими методами или свойствами: 'TestFinalize. ~ TestFinalize ()' и 'TestFinalize.Finalize ()'

И если вызов Finalize закомментирован, он дает следующую ошибку:

Тип «ManagementConcepts.Service.TestFinalize» уже определяет член, называемый «Finalize», с теми же типами параметров




Related