Why Delegates in C#?
Why Delegates in C#?
Delegates in C# are like "method containers"—they let you treat methods as variables, pass them around, and execute them dynamically. Think of them as "super-powered method pointers" that make your code flexible and reusable.
1. Real-Life Analogy: The "Remote Control"
Imagine you have a remote control (the delegate) that can call any method (like turning on a TV, AC, or lights).
Without delegates: You’d need separate remotes for each device.
With delegates: One remote can control any device you assign to it.
Delegate = A universal remote for methods!
2. Why Use Delegates? (Key Benefits)
✅ 1. Flexibility: Change Behavior at Runtime
You can swap methods dynamically.
Example:
delegate void GreetDelegate(string name);
void SayHello(string name) => Console.WriteLine($"Hello, {name}!");
void SayBye(string name) => Console.WriteLine($"Bye, {name}!");
// Assign method to delegate
GreetDelegate greet = SayHello;
greet("Alice"); // Output: "Hello, Alice!"
// Change behavior later
greet = SayBye;
greet("Bob"); // Output: "Bye, Bob!"
✅ 2. Callback Methods (Like Notifications)
Delegates let you "notify" other parts of your code when something happens.
Example:
delegate void NotifyUser(string message);
void SendEmail(string msg) => Console.WriteLine($"Email: {msg}");
void SendSMS(string msg) => Console.WriteLine($"SMS: {msg}");
// Assign multiple methods (Multicast Delegate)
NotifyUser alert = SendEmail;
alert += SendSMS;
// Trigger both methods
alert("Your order is ready!");
// Output:
// Email: Your order is ready!
// SMS: Your order is ready!
✅ 3. Passing Methods as Arguments
You can send a method into another method (like giving a worker a task).
Example:
delegate int MathOperation(int a, int b);
int Add(int a, int b) => a + b;
int Multiply(int a, int b) => a * b;
void Calculate(MathOperation operation, int x, int y)
{
int result = operation(x, y);
Console.WriteLine($"Result: {result}");
}
Calculate(Add, 5, 3); // Output: "Result: 8"
Calculate(Multiply, 5, 3); // Output: "Result: 15"
✅ 4. Events (Special Delegates)
Delegates power events (like button clicks in apps).
Example:
// Publisher
class Button
{
public delegate void ClickHandler();
public event ClickHandler Clicked;
public void Press()
{
Clicked?.Invoke(); // Notify subscribers
}
}
// Subscriber
Button btn = new Button();
btn.Clicked += () => Console.WriteLine("Button clicked!");
btn.Press(); // Output: "Button clicked!"
3. When Should You Use Delegates?
Scenario | Why Delegates? |
---|---|
Callbacks | Notify when a task completes (e.g., file download). |
Dynamic Methods | Swap logic at runtime (e.g., different sorting algorithms). |
Events | Handle UI interactions (button clicks, mouse moves). |
LINQ | Used internally for queries (e.g., .Where(x => x > 5) ). |
4. Delegates vs. Direct Method Calls
Direct Call | Delegate Call |
---|---|
SayHello("Alice"); | GreetDelegate greet = SayHello; greet("Alice"); |
Fixed at compile time | Can change at runtime |
Less flexible | More powerful & reusable |
5. Summary
Delegates are method containers that let you:
Store methods in variables.
Pass methods as arguments.
Chain multiple methods (multicast).
Enable events (like button clicks).
Use them when you need flexibility (callbacks, dynamic behavior, events).
Think of them as "method pointers" that make your code smarter! 🚀
Comments
Post a Comment