DEV Community

Hamza
Hamza

Posted on โ€ข Edited on

3 3 3 3 3

Explaining the Delegates Concept !

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!");
  }

}
Enter fullscreen mode Exit fullscreen mode

Let's talk about the common uses !
There are 3 common uses :

  1. Event Handling
  2. Callback mechanism
  3. 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 
  }
}
Enter fullscreen mode Exit fullscreen mode

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
  }
}
Enter fullscreen mode Exit fullscreen mode

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 ??

  1. Action : Represents method with no return value but with parameters.
Action<string> print = Console.WriteLine;
print("Hello, World!");
Enter fullscreen mode Exit fullscreen mode
  1. Func : Represents a method with a return value and parameter.
Func<int, int, int> add  (x,y) => x + y;
Console.WriteLine(add(3,4));
Enter fullscreen mode Exit fullscreen mode
  1. Predicate : Represents a method that return bool and it takes a single parameter.
Predicate<int> IsEven = x => x % 2 == 0;
Console.WriteLIne(IsEven(4));
Enter fullscreen mode Exit fullscreen mode

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!

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Googleโ€™s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more