~ деструктор
- Деструкторы вызываются автоматически и не могут быть вызваны явно.
- Деструкторы не могут быть перегружены. Таким образом, класс может иметь не более одного деструктора.
- Деструкторы не наследуются. Таким образом, у класса нет деструкторов, кроме того, который может быть объявлен в нем.
- Деструкторы нельзя использовать со структурами. Они используются только с классами.
Экземпляр становится пригодным для уничтожения, когда никакой код больше не может использовать его.
- Выполнение деструктора для экземпляра может произойти в любое время после того, как экземпляр станет пригодным для уничтожения.
- Когда экземпляр уничтожается, деструкторы в его цепочке наследования вызываются по порядку от большинства производных к наименее производным.
Завершить
В C # метод Finalize выполняет операции, которые выполняет стандартный деструктор C ++. В C # вы не называете его Finalize - вы используете синтаксис деструктора C ++, помещая символ тильды (~) перед именем класса.
Утилизировать
Желательно располагать объекты в методе Close()
или Dispose()
, который может быть явно вызван пользователем класса. Finalize (деструктор) вызывается GC.
Интерфейс IDisposable сообщает миру, что ваш класс хранит ресурсы, которые необходимо утилизировать, и предоставляет пользователям способ их освобождения. Если вам нужно реализовать финализатор в вашем классе, ваш метод Dispose должен использовать метод GC.SuppressFinalize()
, чтобы гарантировать, что финализация вашего экземпляра подавлена.
Что использовать?
Недопустимо явно вызывать деструктор. Ваш деструктор будет вызван сборщиком мусора. Если вы обрабатываете драгоценные неуправляемые ресурсы (например, файловые дескрипторы), которые хотите закрыть и утилизировать как можно быстрее, вам следует реализовать интерфейс IDisposable.