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

EventHandler

Тип EventHandler соответствует методу void Handler(object sender, EventArgs e). Обобщённый EventHandler<TEventArgs> принимает наследника EventArgs во втором параметре. На поле с ключевым словом event подписываются через +=, а вызывают из класса-источника.

Синтаксис

public event EventHandler Имя; void Handler(object sender, EventArgs e) { }

Пример

Давайте подпишемся на EventHandler и вызовем событие:

using System; class Worker { public event EventHandler Done; public void Run() { Done?.Invoke(this, EventArgs.Empty); } } class Program { static void OnDone(object sender, EventArgs e) { Console.WriteLine("abcde"); } static void Main() { var worker = new Worker(); worker.Done += OnDone; worker.Run(); } }

Результат выполнения кода:

"abcde"

Пример

Давайте передадим данные через EventHandler<TEventArgs>:

using System; class ValueEventArgs : EventArgs { public int Value; } class Source { public event EventHandler<ValueEventArgs> Changed; public void Raise(int value) { Changed?.Invoke(this, new ValueEventArgs { Value = value }); } } class Program { static void OnChanged(object sender, ValueEventArgs e) { Console.WriteLine(e.Value); } static void Main() { var source = new Source(); source.Changed += OnChanged; source.Raise(5); } }

Результат выполнения кода:

5

Пример

Давайте вызовем два обработчика на одном событии:

using System; class Hub { public event EventHandler Signal; public void Fire() { Signal?.Invoke(this, EventArgs.Empty); } } class Program { static void First(object sender, EventArgs e) { Console.Write("1"); } static void Second(object sender, EventArgs e) { Console.Write("2"); } static void Main() { var hub = new Hub(); hub.Signal += First; hub.Signal += Second; hub.Fire(); } }

Результат выполнения кода:

"12"

Смотрите также

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