Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_С#_ч_2.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

12.5 Вопросы для самопроверки

1 Понятие композиции классов.

2 В чем основная цель композиции классов?

3 Понятие коллекции классов.

4 Какая объединяющая структура обычно используется для коллекционирования однотипных объектов?

5 Какие коллекции относятся к коллекциям с прямым доступом?

6 Какие коллекции относятся к коллекциям с последовательным доступом?

7 Какие коллекции относятся к иерархическим коллекциям?

8 Объекты какого типа могут включаться в коллекцию класса ArrayList?

9 Какое свойство класса ArrayList хранит текущую емкость коллекции?

10 Какое свойство класса ArrayList хранит текущую длину коллекции?

11 Какой метод класса ArrayList позволяет включать объект в коллекцию на нужное место?

13 Делегаты

13.1 Понятие делегата

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

В языке C# методы сами по себе не «гуляют», а могут определяться только внутри некоторых классов.

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

Делегат это специальный класс, предназначенный для хранения ссылок на методы.

По определению – переменная типа класс является объектом. Класс, позволяющий описать некоторое множество объектов, каждый из которых является функцией (или ссылкой на функцию), называется функциональным типом.

Таким образом, делегаты в языке C# предназначены для описания функциональных типов. Экземплярами такого класса являются ссылки на функции (методы) – им также как переменным выделяются места в памяти компьютера, начальные адреса которых являются «точками» входа в функции и передаются ссылками.

Эта особенность делегата определила две основные области его применения – самостоятельно для решения некоторых задач (подобно приведенной выше) или для поддержки событий (смотри следующую лекцию).

В этой лекции мы будем рассматривать самостоятельное использование делегатов для решения некоторых задач.

13.2 Описание делегата

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

[спецификаторы] delegate <тип > <имя> (<параметры>);,

где

спецификаторы определяют условия доступа к делегату;

delegate —зарезервированное слово;

<тип> — тип возвращаемого результата;

<имя> — имя делегата (уникальный идентификатор);

<параметры> — формальные параметры вызова.

Например, описание всех функций вещественного типа, имеющих вещественный аргумент, имеет следующий вид:

public delegate double Funk(double argym);

Любая функция, соответствующая этому описанию, может использоваться в качестве параметра вызова умалчиваемого конструктора класса - делегата, который и возвращает конкретный экземпляр делегата – ссылку на функцию. Отличительной особенность работы делегата является формирование ссылок во время работы программы (динамически), а не на этапе ее компиляции.