Переопределение метода Finalize
Метод Finalize является резервным вариантом очистки ресурсов на тот случай, если метод Dispose не будет вызван. Реализовать метод Finalize нужно только для очистки неуправляемых ресурсов. Так как сборщик мусора очищает управляемые ресурсы автоматически, для управляемых объектов реализовывать метод Finalize не следует. По умолчанию метод Object.Finalize method не делает ничего. Если же требуется, чтобы сборщик мусора до освобождения памяти объекта выполнил завершающие операции, следует переопределить этот метод в соответствующем классе.
Примечание |
---|
Невозможно переопределить метод Finalize в языках программирования C# и C++.В C# следует использовать синтаксис деструктора для реализации метода Finalize.В версии 2.0 платформы .NET Framework C++ предоставляет собственный синтаксис для реализации метода Finalize, как описано в разделе Destructors and Finalizers in Visual C++.В более ранних версиях C++ использовал синтаксис деструктора для метода Finalize, как это сделано в языке C#. |
Область действия метода Object.Finalize защищена. При переопределении метода в классе эта ограниченная область действия должна быть сохранена. Обеспечивая защиту метода Finalize, можно не дать пользователям приложения напрямую вызывать метод Finalize.
Метод Finalize должен освобождать все ресурсы, которые удерживаются данным объектом. Он также должен вызвать метод Finalize базового класса объекта. Метод Finalize объекта не должен вызывать метод каких-либо объектов, кроме базового класса этого объекта. Это объясняется тем, что при вызове других объектов, например, в случае закрытия среды CLR, они могут быть очищены одновременно с вызывающим объектом.
Если для выхода из метода Finalize разрешить какие-либо исключения, система считает, что метод возвращает управление, и продолжает вызывать методы Finalize других объектов.
См. также
Ссылки
Основные понятия
Синтаксис деструкторов в C# и C++
Обработка и создание исключений