Delegates are the type that defines a method signature, and can hold a reference to one or more methods with that signature.
They are often described or called as a Type-Safe function pointers because they allow methods to be passed as a parameter, assigned to variable, or invoke dynamically all while ensuring type-safe..๐
What are the Key Points of the Delegates ๐๏ธ ?
- Method Signature : A delegate specifies return type and the parameters of the method it can refer to. 
- Type-Safe : Delegates ensures that the method they reference has the correct signature. 
- Multicast : A single delegate can reference multiple methods and invoke them sequentially. This is known as multicast delegate. 
- Encapsulation : Delegates encapsulates the methods and it's behavior making them useful for defining callback mechanism. 
So what is the Syntax of Delegates ?!
// 1. Declare a Delegate..
public delegate void MyDelegate(string message);
// 2. Create a method matching the Delegate's signature
public class Program {
  public static void DisplayMessage(string message) {
    Console.WriteLine(message);
  }
  public static void Main() {
    // 3. Instantiate the delegate
    MyDelegate del = DisplayMessage;
    // 4. Invoke the delegate
    del("Hellow, World!");
  }
}
Let's talk about the common uses !
There are 3 common uses :
- Event Handling
- Callback mechanism
- LINQ and Functional programming
Let's explain them one by one
1- Event Handling : Delegate are the foundation of events in C#, They allow subscribing and unsubscribing to events using methods.
public delegate void Notify();
public class EventExample {
  public event Notify OnNotify;
  public void TriggerEvent() {
    OnNotify?.Invoke(); // Safely invoke the delegates if it has subscribers 
  }
}
2- Callback mechanism : Passing a method to another method to be executed later.
public class Calculator {
  public void PerformOperation(int x, int y, Action<int> callback) {
    int result = x + y;
    callback(result);
  }
}
public class Program {
  public static void Main() {
    Calculator calc = new ();
    calc.PerformOperation(2, 3, Console.WriteLine); // Pass Console.WriteLine as a Delegate
  }
}
3- LINQ and Functional Programming : Delegates like Func, Action, Predicate are heavily used in LINQ to define custom logic.
What are the built-in Delegates ??
- Action : Represents method with no return value but with parameters.
Action<string> print = Console.WriteLine;
print("Hello, World!");
- Func : Represents a method with a return value and parameter.
Func<int, int, int> add  (x,y) => x + y;
Console.WriteLine(add(3,4));
- Predicate : Represents a method that return bool and it takes a single parameter.
Predicate<int> IsEven = x => x % 2 == 0;
Console.WriteLIne(IsEven(4));
Advantages of Delegates
- Flexibility => Enables dynamic methods invokation 
- Loose Coupling => Promotes code extensibility by allowing methods to be assigned dynamically 
- Reuseability => Encourages creating modular and reuseable code 
That's it for now! Keep coding and stay awesome. Catch you later Nerds!
 

 
    
Top comments (0)