Является ли Finalize деструктором?
Деструктор - многозначное слово, в каждом языке он означает что-то свое.
С точки зрения спецификации языка C#, никакого метода Finalize нет. Есть только деструкторы, которые вызываются сборщиком мусора. Однако известные компиляторы преобразуют деструктор в метод Finalize, таким образом Finalize - это реализация языковой конструкции "деструктор".
С точки зрения языка С++, деструктор - это место где детерминированно освобождаются ресурсы. На роль такого деструктора больше подходит не Finalize, а метод Dispose. Это отражено в языке C++/CLI, где конструкция ~classname()
преобразуется компилятором именно в Dispose, а для Finalize введена новая конструкция !classname()
С точки зрения языка Delphi в его неуправляемой версии, деструктор - это метод который освобождает память выделенную под объект. Такого деструктора в C# существовать не может.
У деструктора, строго говоря, определенная запись - это именно ~className() {}
. А finalize
- это часть внутренней инфраструктуры - и он неявно вызывается деструктором, причем когда и где выполнится finalize
- не определено, т.е. решает рантайм и никак это нельзя контролировать. Для четкого контроля уничтожения ресурсов объекта следует реализовывать интерфейс IDisposable
. И вообще все это не следует применять если у вас нет неуправляемых ресурсов - смысл теряется, а процессорное время тратится.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как правильно установить библиотеку "Selenium" в C# для Visual Studio? Пытался установить сам, по старым видео урокам, но не получилось
При изучении языка большое внимание уделяется примерам, которые не несут практического примененияДля начала обучения — это несомненно...
Заметил что одни и те же стили в разных страницах отображаются по разному к примеру: