Delegates и events позволяют реализовать Open/Closed Principle, давая тебе возможность расширять функциональность без изменения существующего кода. Это разделяет компоненты и делает систему гибче.
Вместо того чтобы класс OrderProcessor напрямую вызывал логику уведомлений, он публикует события, на которые могут подписаться другие компоненты. Новые функции добавляются просто подпиской на эти события, без изменения основного класса.
public class OrderProcessor
{
public delegate void OrderProcessedEventHandler(Order order);
public event OrderProcessedEventHandler OrderProcessed;
public void ProcessOrder(Order order)
{
// Логика обработки заказа
OrderProcessed?.Invoke(order);
}
}
public class OrderNotification
{
public void OnOrderProcessed(Order order)
{
// Логика уведомления
}
}
OrderProcessor не нужно знать о OrderNotificationКогда заказ обработан, событие срабатывает и все подписанные компоненты получают уведомление. Ты можешь добавить новую функциональность — например, обновление инвентаря или аналитику — просто создав новых подписчиков и зарегистрировав их на событии. Это соответствует OCP, так как система остаётся закрытой для модификации, но открытой для расширения.
Делегаты в C# определяют сигнатуру методов обработчиков событий, а события предоставляют обертку над делегатами, которая запрещает внешнему коду вызывать или переназначать их напрямую.
Новый — ещё не проверен сообществом
Вы