Implementing Event Handling in C# with Publisher-Subscriber Pattern

Publisher-Subscriber Model

  • The publisher-subscriber pattern enables communication between components when a specific event occurs
  • Key participants:
    • Publisher: Class that defines and triggers events
    • Subscriber: Class that registers for event notifications
    • Event handler: Method executed when the publisher raises the event

Event Declaration

class EventPublisher
{
    public delegate void NotificationHandler(string message);
    public event NotificationHandler AlertTriggered;
}

Event Subscription

Multiple subscription apporaches:

// Method reference
publisher.AlertTriggered += subscriber.HandleAlert;

// Delegate instance
publisher.AlertTriggered += new NotificationHandler(subscriber.HandleAlert);

// Lambda expression
publisher.AlertTriggered += (msg) => Console.WriteLine(msg);

Event Triggering

class EventPublisher
{
    public void MonitorSystem()
    {
        if (systemFailing)
        {
            AlertTriggered?.Invoke("System failure detected!");
        }
    }
}

Standard Event Pattern

public class SystemEventArgs : EventArgs
{
    public string ErrorDetails { get; set; }
    public DateTime Timestamp { get; set; }
}

class StandardPublisher
{
    public event EventHandler<SystemEventArgs> SystemEvent;

    protected virtual void OnSystemEvent(SystemEventArgs e)
    {
        SystemEvent?.Invoke(this, e);
    }
}

Event Accessors

private EventHandler<SystemEventArgs> _systemEvent;

public event EventHandler<SystemEventArgs> SystemEvent
{
    add
    {
        _systemEvent += value;
        Console.WriteLine("Handler added");
    }
    remove
    {
        _systemEvent -= value;
        Console.WriteLine("Handler removed");
    }
}

Unsubscribing from Events

// Remove specific handler
publisher.SystemEvent -= subscriber.HandleSystemEvent;

// Remove all handlers
publisher.SystemEvent = null;

Tags: C# events publisher-subscriber Delegates event-handling

Posted on Thu, 20 Aug 2026 16:39:07 +0000 by cahamilton