Добавил:
2200 7008 9480 6099 TKFF БЛАГОДАРНОСТЬ МОЖНО ТУТ ОСТАВИТЬ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ 2025 / 4 курса_МТУСИ / 1 КУРС / Информатика / С# для чайников - Мюллер.pdf
Скачиваний:
0
Добавлен:
04.06.2025
Размер:
53.3 Mб
Скачать

модулю выполнять некоторые полезные действия, такие как запись в журнал или обновление индикатора. Местом, где вы чаще всего ис­ пользуете обратные вызовы, является пользовательский интерфейс. Когда пользователь что-то делает с пользовательским интерфейсом, например нажимает кнопку, он генерирует событие. Метод обратно­ го вызова это событие обрабатывает.

Определение делегата

Для выполнения обратных вызовов С# предоставляет ыдндтяршn(delegates), а также ряд иных вещей. Делегаты представляют собой способ С# (вообще-то, способ .NET, поскольку их может использовать любой язык .NET) передачи методов, как если бы они были данными. Вы говорите "когда потребуется, вы­ полни этот метод" (и передаете метод для выполнения). Эта глава поможет вам разобраться в упомянутой концепции, понять ее полезность и начать использо­ вать в своих программах.

Вы можете быть опытным программистом, который тут же обнаружит схо­ жесть делегатов с указателями на функции С/С++, - только делегаты суще­ ственно лучше. Но в этом разделе я предполагаю, что среди читателей таких программистов нет.

Рассматривайте делегат как транспорт для передачи метода обратного вызо­ ва некоторому методу - "рабочей лошадке", - которому требуется осущест­ влять такие вызовы или требуется помощь при выполнении определенных действий, например, для обработки каждого элемента коллекции (поскольку коллекции ничего не известно о пользовательских действиях, требуется способ передачи этого действия коллекции для выполнения). На рис. 1 9.1 показано, как части такой схемы взаимодействуют между собой.

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

мьоьОпределение типа данных делегата (так же, как вы определяете

класс).

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

Технически делегат представляет собой класс, производный от класса System . MulticastDelegate, который в состоянии хранить один или

несколько "указателей" на методы и вызывать их для вас. Можете рассла­ ТЕХНИЧЕСКИЕ биться - компилятор сам создаст всю необходимую часть класса для вас.

ПОДРОБНОСТИ

ГЛАВА 1 9 Делегирование событий 431

 

 

1 . Определение типа делегата ,------

В процессе создания

 

 

 

 

2. Соэдание экземпляра

экземплярделегата

 

 

получает информацию о том,

 

 

 

 

на какой метод он "указывает"

 

 

 

 

 

 

 

 

 

 

Экземпляр "указывает" на метод, какбудтоон содержит этот метод

5. Вызов делегата приводит к выполнению метода обратного вызова

З. Передача экземпляра делегата в качестве параметра

с(Стг с(д(х#е(а.эйура(кй г г ео-и.и3йВ.г

тк

т т га е р-г12NСNTвг исй э й#иийг о п в гу в гк и г

4. •вызов" делегата помогает выполнить работу

Рис. 19. 1. Схема передачи делегата

2. Создание экземпnяра типа деnеrата анаnоrично созданию экзем­

пnяра кnасса.

В процессе создания вы передаете новому экземпляру делегата имя ме­

 

тода, который хотите использовать в качестве метода обратного вызова

ЗАПОМНИ!

или метода действия.

3. Передача экземпnяра деnеrата некоторому рабочему методу, кото-

рый имеет параметр с типом деnеrата.

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

4. Коrда рабочий метод rотов - например, коrда наступает время об­ новить индикатор хода выпоnнения, - он вызывает деnегат, пере­ давая ему необходимые аргументы.

5. Вызов деnеrата, в свою очередь, выпоnняет метод обратного вызо­

ва, на который "указывает" этот деnеrат.

Используя делегат, рабочий метод"звонит домой':

чрзе ЧАСТЬ 2 Объектно-ориентированное программирование на С#

Соседние файлы в папке Информатика