Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

11.7. Деструкторы и финализаторы

Деструктор —

"деструктор" это член класса, где запрограммированы все

действия, которые необходимо выполнить для уничтожения объекта класса.

Объявление деструктора:

extern opt ~имя_класса( )

тело_деструктора

Как показано в формате, имя_деструктора

"деструктор:имя_деструктора"

— это имя класса с префиксом ~ (тильда). Других имён у деструкторов не бывает.

Деструктор в классе может быть только один. Параметров у деструктора нет. Нет

и

возвращаемого значения. Тело деструктора это блок либо пустой оператор,

обозначаемый символом точка с запятой. Пустой оператор в качестве тела

деструктора используется в том случае, если деструктор снабжён модификатором

extern. В противном случае тело деструктора это блок, включающий операторы,

необходимые для уничтожения объекта. Практически тело деструктора аналогично

телу метода без параметров с возвращаемым значением типа void.

Деструктор выполняется после того как соответствующий объект класса

перестаёт

использоваться

в

программе.

Вызов

деструктора

выполняется

автоматически. Момент вызова конкретно не определён. Явно вызвать деструктор

из кода программы нельзя.

В следующей программе класс включает определение деструктора. Несмотря

на то, что явно деструктор в программе не вызывается, его выполнение

иллюстрирует результат следующей программы (11_08.cs).

// 11_08.cs деструктор

using System;

class A {

~A() {

Console.WriteLine("Destructor!");

}

}

class Test

{

static void Main()

{

A b = new A();

b = null;

}

}

Результат выполнения программы:

Destructor!

В архитектуре .NET деструкторы реализуются с помощью метода с названием

Finalize(). Этот метод, называемый финализатором "финализатор" , подменяет в

сборке реально использованный в коде деструктор. Программируя на уровне язык

а

C#, можно не обращать на это внимание, но это важно понимать, если исследовать

код на языке IL.

Деструктор нужен только в том классе, который требует для создаваемого

объекта выделения неуправляемых ресурсов. Например, когда конструктор объекта

связывает создаваемый объект с дескриптором файла или устанавливает сетевое

соединение. Когда объект выходит из области определения, необходимы действия по

освобождению дескриптора файла или сетевого соединения. Именно такие действия

должен выполнять деструктор.

Контрольные вопросы

Назовите модификаторы класса, применяемые при отсутствии наследования.

Назовите возможные члены класса.

Какие элементы являются обязательными в объявлении нестатического поля.

Когда выполняется инициализация нестатических полей?

Каков статус доступа нестатического поля при отсутствии в его объявлении

модификаторов доступа?

Можно ли объявить статическое поле с типом класса, которому оно принадлежит?

В каком случае в классе могут одновременно присутствовать одноименные

статический и нестатический методы?

В каких случаях телом нестатического метода может быть пустой оператор?

В каком случае конструктор умолчания (конструктор без параметров) создаётся

автоматически?

Назовите возможные применения ссылки this.

В каких методах ссылка this отсутствует?

Опишите формат объявления нестатического конструктора.

Перечислите модификаторы конструктора.

Объясните назначение инициализатора конструктора.

Перечислите виды конструкторов.

Каков статус доступа у конструктора умолчания, встраиваемого в класс

автоматически?

Что такое конструктор копирования?

Каким образом конструктор может обратиться к другому конструктору своего

класса?

Объясните назначение деструктора.

Сколько деструкторов может быть в одном классе?

Что такое финализатор?

Соседние файлы в папке CSBasicCourse2ndedPodbelsky