Статус:
Offline
Реєстрація: 14.06.2007
Повідом.: 13473
Реєстрація: 14.06.2007
Повідом.: 13473
- 🔴 21:26 Повітряна тривога в Харків.обл.
- #41
А в книгах почему-то написано что есть.
Если увидишь книгу в которой написано что в C# есть деструкторы, смело кидай ее в печку, на большее она не годится

В C# нет деструкторов, есть финалайзер, причем он имеет ряд ограничений на использование - из финалайзера можно обращаться только к unmanaged ресурсам (windows handle, различные дескрипторы и т.п.). Больше ничего из финалайзера делать нельзя. К тому-же он вызывается из специального потока GC, его вызов не гарантирован и время выполнения ограничено (выполнение будет принудительно прервано после истечения нескольких секунд). Предназначен финалайзер для того чтобы GC имел возможность почистить хендлы. Если ты не используешь win api interop, то финалайзер создавать не следует!

Чтобы было понятнее, финалайзер нужен для GC. На логику программы его удаление никак не должно влиять. Обращение к элементам класса из финалайзера является грубой ошибкой.
Вместо деструкторов в C# используется паттерн Dispose, для чего в основной библиотеке есть интерфейс IDisposable. C# поддерживает этот паттерн на уровне языка, например есть блоки using для работы с объектами реализующими этот паттерн. Паттерн Dispose не имеет отношения к финализатору - это разные вещи.
Останнє редагування: