Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csOpDeEv 135 of 163 menu
◀ ▶

Защищенный список обработчиков в C#

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

В объявлении класса перед типом делегата ставят модификатор события. Запишем класс с полем оповещения о завершении работы:

class Notifier { public event Action? Done; }

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

void OnPing() { Console.WriteLine("ping"); } Hub hub = new Hub(); // hub.Ping = OnPing; class Hub { public event Action? Ping; }

Сделайте класс Bell с публичным полем оповещения Ring: снаружи должно быть можно подключать и отключать отдельные обработчики, но нельзя заменить весь список одним присваиванием. Достаточно объявления класса с таким полем.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить