رویدادها (Events) در C#
Event ها مکانیزمی در C# هستند که بر پایه Delegate ساخته شدهاند و برای پیادهسازی ارتباط بین اشیاء (Publish/Subscribe) استفاده میشوند.
Event چیست؟
Event به ما اجازه میدهد یک کلاس اعلان بدهد که اتفاقی افتاده است و کلاسهای دیگر به آن واکنش نشان دهند.
تعریف Event
public class Button
{
public event Action Clicked;
public void Click()
{
Console.WriteLine("Button clicked!");
Clicked?.Invoke();
}
}
اشتراک در Event
Button button = new Button();
button.Clicked += () =>
{
Console.WriteLine("Handler 1 executed");
};
button.Clicked += () =>
{
Console.WriteLine("Handler 2 executed");
};
button.Click();
Event با پارامتر
public class MessageEventArgs
{
public string Message { get; set; }
}
public class Publisher
{
public event Action MessageSent;
public void Send(string message)
{
MessageSent?.Invoke(new MessageEventArgs
{
Message = message
});
}
}
Publisher publisher = new Publisher();
publisher.MessageSent += (args) =>
{
Console.WriteLine(args.Message);
};
publisher.Send("Hello Event");
EventHandler استاندارد
در C# بهتر است از الگوی استاندارد EventHandler استفاده شود.
public class Notification
{
public event EventHandler OnNotify;
public void Notify(string message)
{
OnNotify?.Invoke(this, message);
}
}
Notification notification = new Notification();
notification.OnNotify += (sender, message) =>
{
Console.WriteLine(message);
};
notification.Notify("System updated");
کاربرد Events
- UI (مثل دکمهها در ASP.NET / WinForms)
- Event-driven architecture
- Microservices communication
- Domain events در DDD
مثال واقعی در پروژه
public class OrderService
{
public event Action OrderCreated;
public void CreateOrder()
{
Console.WriteLine("Order created");
OrderCreated?.Invoke(1);
}
}
OrderService service = new OrderService();
service.OrderCreated += (orderId) =>
{
Console.WriteLine($"Send email for order {orderId}");
};
جمعبندی
Event ها ابزار مهمی برای ایجاد سیستمهای loosely coupled هستند و نقش مهمی در معماریهای مدرن C# دارند.