TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #146 743
Finalize
Метод Finalize также называется деструктором класса. Его нельзя явно вызвать в коде. Только сборщик мусора может вызывать метод Finalize (финализатор), когда объект становится недоступным. Финализатор не может быть реализован напрямую, только через объявление деструктора. Следующий класс иллюстрирует, как объявить деструктор. Рекомендуется реализовывать методы Finalize и Dispose вместе, если вам нужно реализовать деструктор. После компиляции деструктор становится методом Finalize.
public class MyClass: IDisposable {
//Конструктор
public MyClass() {
//Инициализация
}
//Деструктор или финализатор
~MyClass() {
this.Dispose();
}
public void Dispose() {
//код для освобождения неуправляемых ресурсов
}
}

Использование Finalize
Возникает вопрос, когда реализовать финализатор? Это может быть любой неуправляемый ресурс, например файловый поток, объявленный на уровне класса. Возможно, мы не знаем, на какой стадии или на каком шаге программы следует закрыть файл. Этот объект используется во многих местах приложения. Так что в этом сценарии метод Finalize - подходящее место, где может быть освобожден неуправляемый ресурс. Это означает, что память, полученная неуправляемым ресурсом, очищается, как только объект станет недоступен для приложения.
Финализация немного дороже в использовании. Она не очищает память сразу. Когда приложение запускается, сборщик мусора поддерживает отдельную очередь на финализацию, куда он добавляет все объекты, которые должны быть финализированы. Другими словами, сборщик мусора знает, для какого объекта реализован метод Finalize. Когда объект становится недоступным и готов к очистке, сборщик мусора вызывает метод Finalize этого объекта и удаляет его из очереди на финализацию. На этой итерации сбора мусора сборщик просто очищает память, которая используется неуправляемым ресурсом. Память, используемая управляемым ресурсом (самим объектом), все еще находится в куче в качестве недоступной ссылки. Эта память освобождается, когда сборщик мусора запустится в следующий раз. Из-за метода финализации сборщик не очищает всю память, связанную с объектом, с первой попытки.

Заключение
Рекомендуется не применять метод Finalize без крайней необходимости. В приоритете всегда должна быть реализация метода Dispose и очистка неуправляемой памяти, как только программа закончит работу с ней.

Источник: https://www.c-sharpcorner.com
More from @netdeveloperdiary
  1. Sep 30, 2026Post #3356
  2. Sep 29, 2026Фото 3 (с) Анатолий Кулаков
  3. Sep 29, 2026День 2799. Конференция DotNext 2026. Часть 1 25 и 26 сентября в Москве прошла очередная ко…
  4. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  5. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  6. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →