Skip to content
C#

Delegates and Events

Define delegate types and publish events with safe subscription.

#delegate#event

Code

csharp
using System;

public delegate void Notify(string message);

public class Button
{
    // Event restricts external invocation
    public event Notify? Clicked;

    public void Click()
    {
        Console.WriteLine("Button.Click raising event");
        Clicked?.Invoke("clicked at " + DateTime.Now.ToShortTimeString());
    }
}

class Program
{
    static void Main()
    {
        var btn = new Button();

        // Subscribe with named methods
        btn.Clicked += OnClickLog;
        // Subscribe with lambda
        btn.Clicked += msg => Console.WriteLine($"[lambda] {msg}");

        btn.Click();
        btn.Clicked -= OnClickLog;   // unsubscribe
        btn.Click();
    }

    static void OnClickLog(string message) =>
        Console.WriteLine($"[logger] {message}");
}