Делегаты и события
Автор: wwww779 • Март 4, 2023 • Реферат • 438 Слов (2 Страниц) • 149 Просмотры
Делегаты и события
Делегат – это конструкция C#, с помощью которой можно вызывать некую функцию. Делегат объявляется с сигнатурой (то есть заголовок, спецификация метода), указывающей тип возвращаемого значения и параметры для методов, на которые он ссылается, и может содержать ссылки только на методы, соответствующие его сигнатуре. В контексте событий делегат – это посредник (или механизм, подобный указателю) между отправителем события и кодом, обрабатывающим событие.
Синтаксис объявления делегата:
public delegate ТипВозвращаемогоЗначения ИмяДелегата(список_параметров_с_их_типами);
Например,
public delegate int MyDelegate(string a, double b);
Этот делегат может вызывать любой метод (или функцию), у которого тип возвращаемого значения — int, первый параметр описан как string a, а второй — double b. Стоит отметить, что в данном примере не указывается имя метода, с которым связан конкретный алгоритм реализации этого метода. То есть с помощью делегата можно вызывать любой метод, лишь бы его сигнатура (усеченная, без имени) совпадала с сигнатурой делегата.
У делегатов широкая область применения в .NET Framework. Например, в приложениях Windows класс Button поддерживает событие Click. Этот тип события является делегатом. Метод-обработчик, вызываемый с событием Click, должен быть определен с параметрами, заданными в типе делегата.
Событие представляет собой автоматическое уведомление о совершении действия. Это действие может быть вызвано пользовательским взаимодействием, например, нажатием кнопки, или какой-то другой программной логикой. Объект, вызывающий событие, называется отправителем событий. Отправителю событий неизвестен объект или метод, который будет обрабатывать созданные им события.
События являются членами класса и объявляются с помощью ключевого слова event. Чаще всего для этой цели используется следующая форма:
event делегат_события имя_события;
Обработчик события – это обычный метод, который выполняет некоторые действия в программе, в случае если сгенерировалось событие.
Другими словами, обработчик события — это делегат со специальной сигнатурой:
public delegate void MyEventHandler(object sender, MyEventArgs e);
Здесь первый параметр (sender) определяет объект, который издает событие. Второй параметр (e) содержит данные, которые должны быть использованы обработчиком события. Класс MyEventArgs должен быть производным от класса EventArgs, который является базовым классом для более специализированных классов.
...