гдеимя_классаозначает имя конкретного класса. Следовательно, деструктор объявляется аналогично конструктору, за исключением того, что перед его именем указывается знак "тильда" (~). Обратите внимание на то, что у деструктора отсутствуют возвращаемый тип и передаваемые ему аргументы.

Для того чтобы добавить деструктор в класс, достаточно включить его в класс в качестве члена. Он вызывается всякий раз, когда предполагается утилизировать объект его класса. В деструкторе можно указать те действия, которые следует выполнить перед тем, как уничтожать объект.

Следует, однако, иметь в виду, что деструктор вызывается непосредственно перед "сборкой мусора". Он не вызывается, например, в тот момент, когда переменная, содержащая ссылку на объект, оказывается за пределами области действия этого объекта. (В этом отношении деструкторы в C# отличаются от деструкторов в C++, где они вызываются в тот момент, когда объект оказывается за пределами области своего действия.) Это означает, что заранее нельзя знать, когда именно следует вызывать деструктор. Кроме того, программа может завершиться до того, как произойдет "сборка мусора", а следовательно, деструктор может быть вообще не вызван.

Ниже приведен пример программы, демонстрирующий применение деструктора. В этой программе создается и уничтожается большое число объектов. В какой-то момент по ходу данного процесса активизируется "сборка мусора" и вызываются деструкторы для уничтожения ненужных объектов.

// Продемонстрировать применение деструктора.

using System;

class Destruct { public int x;

public Destruct(int i) {

х = i ;

}

// Вызывается при утилизации объекта.

-Destruct() -{

Console.WriteLine("Уничтожить " + х);

}

// Создает объект и тут же уничтожает его. public void Generator(int i) {

Destruct о = new Destruct (i);

}

}

class DestructDemo { static void Main() { int count;

Destruct ob = new Destruct(0);

/* А теперь создать большое число объектов.

В какой-то момент произойдет "сборка мусора".

Примечание: для того чтобы активизировать "сборку мусора", возможно, придется увеличить число создаваемых объектов. */

for(count=l; count < 100000; count++) ob.Generator(count);

Console.WriteLine("Готово!");

}

}

Перейти на страницу:

Похожие книги