Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet26/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   22   23   24   25   26   27   28   29   ...   91
Bog'liq
Язык программирования 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:
1   ...   22   23   24   25   26   27   28   29   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling