6 ответов:
~ это деструктор
- деструкторы вызываются автоматически и не могут быть вызваны явно.
- деструкторы не могут быть перегружены. Таким образом, класс может иметь не более одного деструктора.
- деструкторы не наследуются. Таким образом, класс не имеет других деструкторов, кроме того, который может быть объявлен в нем.
- деструкторы нельзя использовать со структурами. Они используются только с классами. Экземпляр получает право на уничтожение, когда любой код больше не может использовать экземпляр.
- выполнение деструктора для экземпляра может произойти в любое время после того, как экземпляр становится пригодным для уничтожения.
- при разрушении экземпляра деструкторы в его цепочке наследования вызываются по порядку от наиболее производного к наименее производному.
завершить
В C# метод Finalize выполняет операции, которые выполняет стандартный C++ деструктор подойдет. В C# Вы не называете его Finalize -- вы используете синтаксис деструктора C++ для размещения символа Тильды ( ~ ) перед именем класса.
распоряжения
предпочтительно утилизировать объекты в
Close()илиDispose()метод, который может быть вызван явно пользователем класса. Finalize (деструктор) вызываются GC.The IDisposable интерфейс говорит миру, что ваш класс удерживает ресурсы это должно быть удалено и предоставляет пользователям способ освободить их. Если вам нужно реализовать финализатор в своем классе, ваш метод Dispose должны использовать
GC.SuppressFinalize()метод, чтобы гарантировать, что завершение вашего экземпляра подавляется.что использовать?
это не является законным, чтобы вызвать деструктор явно. Ваш деструктор будет вызван сборщиком мусора. Если вы обрабатываете драгоценные неуправляемые ресурсы (например, дескрипторы файлов), которые вы хочу закрыть и утилизировать как можно быстрее, вы должны реализовать интерфейс IDisposable.
Это финализатор. Честно говоря, вам очень редко нужно писать финализатор. Вам действительно нужно только написать один, если:
- у вас есть прямой доступ к неуправляемому ресурсу (например, через
IntPtr), и вы не можете использоватьSafeHandleчто делает его легче- вы реализуете
IDisposableв классе, который не запечатан. (Я предпочитаю запечатывать классы, если они не предназначены для наследования.) Финализатор является частью канонического Dispose закономерность в таких случаях.
Так же, как и C++, это деструктор; однако в C# вы не вызываете его явно, он вызывается, когда объект собирается.
посмотреть Деструкторы (Руководство По Программированию На C#). Однако имейте в виду, что, в отличие от C++, программист не контролирует, когда вызывается деструктор, потому что это определяется сборщиком мусора.
Comments