📞 Delegates = Function Pointers
Passing methods as parameters? Delegates enable callbacks. Events enable notifications. Essential for event-driven programming.
📝 Delegates
// Declare delegate
public delegate void ProcessDelegate(string message);
// Method matching delegate
public void PrintMessage(string msg) => Console.WriteLine(msg);
// Use delegate
ProcessDelegate handler = PrintMessage;
handler("Hello");
// Multicast delegate
handler += msg => Console.WriteLine($"Another: {msg}");
handler("World"); // Both methods called
// Func and Action (built-in delegates)
Action print = msg => Console.WriteLine(msg);
Func add = (a, b) => a + b;
Func isEven = n => n % 2 == 0;
🎯 Events
public class Button
{
public event EventHandler Clicked;
public event EventHandler CustomClick;
public void Click()
{
Clicked?.Invoke(this, EventArgs.Empty);
CustomClick?.Invoke(this, new ButtonEventArgs("Clicked"));
}
}
public class ButtonEventArgs : EventArgs
{
public string Message { get; }
public ButtonEventArgs(string message) => Message = message;
}
// Usage
Button btn = new Button();
btn.Clicked += (sender, e) => Console.WriteLine("Button clicked");
btn.Clicked += (sender, e) => Console.WriteLine("Second handler");
btn.Click();
// Remove event handler
btn.Clicked -= (sender, e) => Console.WriteLine("Second handler");
💡 Use Cases
- UI event handling (click, hover)
- Callback functions (async operations)
- Observer pattern (notifications)
- LINQ (Func delegates)
- Plugins and extensibility
“Delegates and events enabled flexible callbacks. Event handlers can be added/removed dynamically. Essential for extensible applications.”
