В C#, каково различие между деструктором и Завершить методом в классе?

Две точки приходят на ум:

  1. безопасность (но, пока Вы генерируете строку, которая будет оценена сами, это могло бы быть надуманным вопросом)

  2. Производительность: пока код, который будет выполняться, не неизвестен, он не может быть оптимизирован. (о JavaScript и производительности, конечно представление Steve Yegge )

91
задан Sam 20 August 2014 в 19:12
поделиться

2 ответа

Деструктор в C # переопределяет метод System.Object.Finalize . Для этого вы должны использовать синтаксис деструктора. Если вручную переопределить Finalize , появится сообщение об ошибке.

В основном то, что вы пытаетесь сделать с объявлением метода Finalize , - это скрытие метода базового класса. Это заставит компилятор выдать предупреждение, которое можно отключить с помощью модификатора new (если он собирался работать). Здесь важно отметить, что вы не можете одновременно переопределить и объявить новый член с одинаковым именем одновременно, поэтому имея и деструктор, и метод Finalize приведет к ошибке (но вы можете ,

64
ответ дан 24 November 2019 в 06:48
поделиться

Найдено здесь: http://sanjaysainitech.blogspot.com/2007/06/difference-between-destructor-dispose.html[12123 providedDestructor[12124 impressionЭто специальные методы, содержащие чистый код для объекта. Вы не можете явно вызывать их в своем коде, поскольку они называются неявно GC. В C # они имеют то же имя, что и предшествующее имя класса знаком ~ . Like-

 Класс MyClass
{

~ MyClass ()
{
.....
}
}

В VB.NET деструкторы реализуются путем переопределения Finalize метод класса System.Object.

  • Dispose

    Они аналогичны любым другим методам в классе и могут быть вызваны явно, но у них есть особая цель - очистить объект. В методе dispose мы пишем код очистки для объекта. это важно, чтобы мы освободили все неуправляемые ресурсы в утилизации метод, такой как подключение к базе данных, файлы и т. д. Класс, реализующий Метод dispose должен реализовывать интерфейс IDisposable. должен вызвать метод GC.SuppressFinalize для объекта, которым он является удаление, если у класса есть дестуректор, потому что он уже выполнил работа по очистке объекта, то мусор не нужен сборщик для вызова метода Finalize объекта. Ссылка: http://msdn2.microsoft.com/en-us/library/aa720161 (VS.71) .aspx

  • Finalize

    Метод Finalize действует как средство защиты для очистки ресурсов в событие, что ваш метод Dispose не вызывается. Вы должны только реализовать метод Finalize для очистки неуправляемых ресурсов. Вы не следует реализовывать метод Finalize для управляемых объектов, потому что сборщик мусора автоматически очищает управляемые ресурсы. Метод Finalize вызывается GC неявно, поэтому вы не можете вызовите его из своего кода.

    Примечание: В C # метод Finalize нельзя переопределить, поэтому вам необходимо использовать деструктор, внутренняя реализация которого переопределит Метод Finalize в MSIL, но в VB.NET метод Finalize может быть переопределить, потому что он поддерживает метод деструктора.

  • Обновление: Интересный полусвязанный поток здесь .

    19
    ответ дан 24 November 2019 в 06:48
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: