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

Унарные операции

Можно определять в классе следующие унарные операции:

+ - ! - ++ -- true false

Синтаксис объявителя унарной операции:

тип operator унарная операция ( параметр )

Параметр, передаваемый в операцию, должен иметь тип класса, для которого она определяется. Операция должна возвращать:

• для операций +, -, ! и - величину любого типа;

• для операций ++ и - - величину типа класса, для которого она определяется;

• для операций true и false величину типа bool.

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

Бинарные операции

Можно определять в классе следующие бинарные операции:

+-*/%&« » == != > < >= <=

Синтаксис объявителя бинарной операции:

тип operator бинарная_операция (параметр1 параметр2)

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

Операции преобразования типа

Операции преобразования типа обеспечивают возможность явного и неявного преобразования между пользовательскими типами данных. Синтаксис объявителя операции преобразования типа:

Implicit operator тип ( параметр ) // неявное преобразование

explicit operator тип ( параметр ) // явное преобразование

Деструкторы

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

Синтаксис деструктора:

[ атрибуты ] [ extern ] -имя_класса()

тело

Деструктор не имеет параметров, не возвращает значения и не требует указания спецификаторов доступа. Его имя совпадает с именем класса и предваряется тильдой (~), символизирующей обратные по отношению к конструктору действия. Тело деструктора представляет собой блок или просто точку с запятой, если деструктор определен как внешний (extern).

Сборщик мусора удаляет объекты, на которые нет ссылок..

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

Вложенные типы

В классе можно определять типы данных, внутренние по отношению к классу. Так определяются вспомогательные типы, которые используются только содержащим их классом. Механизм вложенных типов позволяет скрыть ненужные детали и более полно реализовать принцип инкапсуляции. Для вложенных типов можно использовать те же спецификаторы что и для полей класса.

2) Интерфейсы: синтаксис, реализация, операции is и as.

Интерфейс является «крайним случаем» абстрактного класса. В нем задается набор абстрактных методов, свойств и индексаторов, которые должны быть реализованы в производных классах. Интерфейс определяет поведение, которое поддерживается реализующими этот интерфейс классами. Идея использования интерфейса состоит в том, чтобы к объектам таких классов можно было обращаться одинаковым образом. Синтаксис интерфейса аналогичен синтаксису класса:

[ атрибуты ] [ спецификаторы ] interface имя_интерфейса [ : предки ]

телоинтерфейса [ ; ]

Для интерфейса могут быть указаны спецификаторы, new, publiс, protected, internal и private. Спецификатор new применяется для вложенных интерфейсов и имеет такой же смысл, как и соответствующий модификатор метода класса.

Интерфейс может наследовать свойства нескольких интерфейсов, в этом случае предки перечисляются через запятую. Тело интерфейса составляют абстрактные методы, шаблоны свойств и индексаторов, а также события.