رویدادها (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# دارند.