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

Операции с перечислениями

С переменными перечисляемого типа можно выполнять арифметические операции (+, -, ++, --), логические поразрядные операции (*, &, |, ~), сравнивать их с помощью операций отношения (<, <=, >, >=, ==, !=) и получать размер в байтах (sizeof).

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

5)Делегаты. Передача делегатов в методы.

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

Описание делегата задает сигнатуру методов, которые могут быть вызваны с его помощью:

[ атрибуты ] [ спецификаторы ] delegate тип имя_делегата ( [ параметры ] )

Спецификаторы делегата имеют тот же смысл, что и для класса, причем допускаются только спецификаторы new, public, protected, internal и private.

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

Пример описания делегата:

public delegate void D ( int i );

Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.

Для того чтобы воспользоваться делегатом, необходимо создать его экземпляр и задать имена методов, на которые он будет ссылаться. При вызове экземпляра делегата вызываются все заданные в нем методы.

Делегаты применяются в основном для следующих целей:

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

• обеспечения связи между объектами по типу «источник — наблюдатель»;

• создания универсальных методов, в которые можно передавать другие методы;

• поддержки механизма обратных вызовов.

Использование делегата имеет тот же синтаксис, что и вызов метода. Если делегат хранит ссылки на несколько методов, они вызываются последовательно в том порядке, в котором были добавлены в делегат.

Добавление метода в список выполняется либо с помощью метода Combine, унас­ледованного от класса System.Delegate, либо, с помощью перегруженной операции сложения.

Передача делегатов в методы

Делегат можно передавать в методы в качестве параметра. Таким образом обеспечивается функциональная параметризация: в метод можно передавать не только различные данные, но и различные функции их обработки. Функциональная параметризация применяется для создания универсальных методов и обеспечения возможности обратного вызова.

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

Обратный вызов (callback) представляет собой вызов функции, передаваемое в другую функцию в качестве параметра.