События (event
) в C# используются для реализации механизма уведомлений между объектами. Они позволяют одному объекту оповещать другие о произошедших изменениях.
Объявление и использование событий
Событие определяется с использованием ключевого слова event
и типа делегата.
using System;
class EventPublisher
{
public event Action OnEvent;
public void TriggerEvent()
{
OnEvent?.Invoke();
}
}
class Program
{
static void Main()
{
EventPublisher publisher = new EventPublisher();
publisher.OnEvent += () => Console.WriteLine("Событие произошло!");
publisher.TriggerEvent();
}
}
Вывод:
Событие произошло!
Подписка и отписка от событий
Методы можно добавлять и удалять из списка обработчиков событий с помощью операторов +=
и -=
.
using System;
class EventPublisher
{
public event Action OnEvent;
public void TriggerEvent()
{
OnEvent?.Invoke();
}
}
class Program
{
static void Handler() => Console.WriteLine("Обработчик вызван");
static void Main()
{
EventPublisher publisher = new EventPublisher();
publisher.OnEvent += Handler;
publisher.TriggerEvent();
publisher.OnEvent -= Handler;
publisher.TriggerEvent();
}
}
Вывод:
Обработчик вызван
Использование EventHandler
и EventHandler<T>
Встроенные делегаты EventHandler
и EventHandler<T>
упрощают объявление событий.
using System;
class EventPublisher
{
public event EventHandler<string> OnMessage;
public void SendMessage(string message)
{
OnMessage?.Invoke(this, message);
}
}
class Program
{
static void MessageHandler(object sender, string message)
{
Console.WriteLine($"Получено сообщение: {message}");
}
static void Main()
{
EventPublisher publisher = new EventPublisher();
publisher.OnMessage += MessageHandler;
publisher.SendMessage("Привет, мир!");
}
}
Вывод:
Получено сообщение: Привет, мир!
События в C# обеспечивают гибкий механизм взаимодействия между объектами, упрощая реализацию паттерна “наблюдатель” и обработку асинхронных уведомлений.