Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч
Download 2.46 Mb.
|
Язык программирования C#
6.6. Уничтожение объекта. Деструкторы
Если перед уничтожением объекта необходимо выполнить какие-либо действия, то их необходимо поместить в деструктор. Обычно в деструктор помещают инструкции по освобождению занятых объектом системных ресурсов таки как: дескрипторы файлов или подключения к базам данных. Благодаря автоматической сборке мусора деструкторы в программирование под .Net не обязательны и в соответствии с этим правила языка C# не требуют обязательного определения деструктора в классе. Деструктор будет вызван сборщиком мусора перед уничтожением объект. Нельзя точно предсказать, когда сработает сборщик мусора, а, следовательно, и когда будет вызван деструктор. Поэтому если вы явно выделяете ресурсы для работы объекта желательно также явно их и освобождать в специальном методе. Деструктор не может не возвращать значения, не принимать аргументы. В классе может быть только один деструктор. Общая форма для объявления деструктора класса имеет следующий вид: ~имя_класса() { } class Car { // деструктор ~Car() { // тело деструктора } } class InfoWriter { // поля FileStream File; StreamWriter Dest; // конструктор public InfoWriter(string FileName) { File = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write); Dest = new StreamWriter(File); } // метод public void Write(string info) { for (int i = 1; i < 3; i++) Dest.WriteLine(info); } // деструктор ~InfoWriter() { Dest.Close(); } } Лист. 6.15 В этом листинге приведен пример класса, в конструкторе которого происходит связывание с файлом, а в деструкторе этот файл освобождается. class DestructionDemo { int Number; public DestructionDemo(int Number) { this.Number = Number; } ~DestructionDemo() { Console.WriteLine("Уничтожается объект класса DestructionDemo №" + Number); } } class Program { static void Main(string[] args) { for (int i = 0; i < 100; i++) new DestructionDemo(i); } } Лист. 6.16 В данном листинге представлен класс DestructionDemo, в котором объявлены только конструктор и деструктор. Конструктор при создании объекта заносит в его поле Number переданное конструктору число. Деструктор перед разрушением объекта выводит на консоль номер, занесенный в этот объект при его создании. В классе Program этого листинга находится точка входа в программу – метод Main. В этом методе создаются 100 объектов класса DestructionDemo. Фактически сразу после создания объекты выходят из области видимости и становятся на сборку мусора, но в каком порядке объекты будут собраны сборщиком мусора предсказать невозможно. Перед тем как объект будет уничтожен, он выдает информацию о себе. Вывод программы имеет примерно следующий вид: Уничтожается объект класса DestructionDemo №99 ………………………………………………………… Уничтожается объект класса DestructionDemo №4 Вывод. 6.3 Download 2.46 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling