Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1089 of 1492 menu
◀ ▶

Финализатор

Финализатор записывают как ~ИмяТипа без параметров и возвращаемого типа. Его не вызывают явно из кода: момент запуска не задан и может не наступить, если объект ещё достижим. Для освобождения ресурсов обычно используют явные схемы вроде IDisposable; финализатор - запасной путь на случай, когда объект забыли освободить вручную.

Синтаксис

class Имя { ~Имя() { // код финализатора } }

Пример

Давайте создадим объект обычным конструктором и выведем его метку - это предсказуемый результат:

using System; class Worker { public string Label; public Worker(string label) { Label = label; } ~Worker() { // CLR может вызвать это позже или не вызвать } } class Program { static void Main() { var worker = new Worker("abcde"); Console.WriteLine(worker.Label); } }

Результат выполнения кода:

"abcde"

Пример

Давайте покажем тело финализатора рядом с конструктором - вывод в Main снова идёт только из конструктора:

using System; class BufferHolder { public int Size; public BufferHolder(int size) { Size = size; } ~BufferHolder() { // освобождение неуправляемого ресурса, если нужно } } class Program { static void Main() { var holder = new BufferHolder(5); Console.WriteLine(holder.Size); } }

Результат выполнения кода:

5

Пример

Давайте объявим финализатор в классе с несколькими экземплярами - порядок их финализации не задаётся кодом программы:

using System; class Node { public int Id; public Node(int id) { Id = id; } ~Node() { } } class Program { static void Main() { var left = new Node(1); var right = new Node(2); Console.WriteLine($"{left.Id} {right.Id}"); } }

Результат выполнения кода:

1 2

Смотрите также

  • конструктор,
    который создаёт объект и задаёт начальное состояние
  • класс Object,
    от которого наследуют финализатор все типы
  • статический конструктор,
    который инициализирует тип один раз
  • оператор new,
    которым создают экземпляр до возможной финализации
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить