Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ShPOR.docx
Скачиваний:
37
Добавлен:
23.04.2019
Размер:
93.52 Кб
Скачать

4.Конструкторы и деструкторы. Функциональное назначение. Виды конструкторов.

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

Создание объектов происходит при объявлении сущности в момент ее инициализации. Пример создания объектов класса Person:

Person pers1 = new Person();

Person pers2= new Person("Петрова");

Сущности pers1, pers2 класса Person объявляются с инициализацией, задаваемой унарной операцией new, которой в качестве аргумента передается конструктор класса Person. У класса может быть несколько конструкторов. В данном примере в первой строке вызывается конструктор без аргументов, во второй строке для сущности pers2 вызывается конструктор с одним аргументом типа string. Разберем в деталях процесс создания:

• первым делом для сущности pers создается ссылка, пока висячая, со значением null;

• затем в динамической памяти создается объект — структура данных с полями, определяемыми классом Person. Поля объекта инициализируются значениями по умолчанию: ссылочные поля — значением null, арифметические — нулями, строковые — пустой строкой. Эту работу выполняет конструктор по умолчанию, который, можно считать, всегда вызывается в начале процесса создания.

• если поля класса проинициализированы, как в нашем примере, то выполняется инициализация полей заданными значениями;

• если вызван конструктор с аргументами, то начинает выполняться тело этого конструктора. Как правило, при этом происходит инициализация отдельных полей класса значениями, переданными конструктору. Так, поле fam объекта pers2 получает значение "Петрова";

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

Классу может потребоваться несколько конструкторов, в зависимости от контекста и создаваемого объекта, может требоваться различная инициализация его полей. Перегрузка конструкторов и обеспечивает решение этой задачи. Объекты создаются динамически в процессе выполнения программы — для создания объекта всегда вызывается тот или иной конструктор класса.

Деструкторы класса

Средства языка С# позволяют определить метод, который должен вызываться непосредственно перед тем, как объект будет окончательно разрушен системой сбора мусора. Этот метод называется деструктором, и его можно использовать для обеспечения гарантии "чистоты" ликвидации объекта. Например, можно использовать деструктор для гарантированного закрытия файла, открытого некоторым объектом. Форма записи деструктора:

~имя_класса() {

// код деструктора

}

Таким образом, деструктор объявляется подобно конструктору за исключением того, что его имени предшествует символ "тильда" (~). (Подобно конструктору, деструктор не возвращает значения.) Чтобы добавить деструктор в класс, достаточно включить его как член. Он вызывается в момент, предшествующий процессу утилизации объекта. В теле деструктора указываются действия, которые, должны быть выполнены перед разрушением объекта.

Важно понимать, что деструктор вызывается только перед началом работы системы сбора мусора и не вызывается, например, когда объект выходит за пределы области видимости. Это означает, что нельзя точно знать, когда будет выполнен деструктор. Однако точно известно, что все деструкторы будут вызваны перед завершением программы. Применение деструкторов замедляет процесс сборки мусора.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]