Является ли Finalize деструктором?

182
11 апреля 2018, 06:44

Является ли Finalize деструктором?

Answer 1

Деструктор - многозначное слово, в каждом языке он означает что-то свое.

С точки зрения спецификации языка C#, никакого метода Finalize нет. Есть только деструкторы, которые вызываются сборщиком мусора. Однако известные компиляторы преобразуют деструктор в метод Finalize, таким образом Finalize - это реализация языковой конструкции "деструктор".

С точки зрения языка С++, деструктор - это место где детерминированно освобождаются ресурсы. На роль такого деструктора больше подходит не Finalize, а метод Dispose. Это отражено в языке C++/CLI, где конструкция ~classname() преобразуется компилятором именно в Dispose, а для Finalize введена новая конструкция !classname()

С точки зрения языка Delphi в его неуправляемой версии, деструктор - это метод который освобождает память выделенную под объект. Такого деструктора в C# существовать не может.

Answer 2

У деструктора, строго говоря, определенная запись - это именно ~className() {}. А finalize - это часть внутренней инфраструктуры - и он неявно вызывается деструктором, причем когда и где выполнится finalize - не определено, т.е. решает рантайм и никак это нельзя контролировать. Для четкого контроля уничтожения ресурсов объекта следует реализовывать интерфейс IDisposable. И вообще все это не следует применять если у вас нет неуправляемых ресурсов - смысл теряется, а процессорное время тратится.

READ ALSO
Как установить библиотеку “Selenium”?

Как установить библиотеку “Selenium”?

Как правильно установить библиотеку "Selenium" в C# для Visual Studio? Пытался установить сам, по старым видео урокам, но не получилось

151
Практика на C# в примерах? [требует правки]

Практика на C# в примерах? [требует правки]

При изучении языка большое внимание уделяется примерам, которые не несут практического примененияДля начала обучения — это несомненно...

156
Из-за чего стили отображаются по разному?

Из-за чего стили отображаются по разному?

Заметил что одни и те же стили в разных страницах отображаются по разному к примеру:

185