C# delegates

In C#, a delegate is a pointer to a method. That means, a delegate holds the address of a method which can be called using that delegate.

Let's learn how we can define and execute a delegate.


Define a delegate

We define a delegate just like we define a normal method. That is, delegate also has a return type and parameter. For example,

public delegate int myDelegate(int x);

Here,

  • delegate - a keyword
  • int - return type of delegate
  • myDelegate - delegate name
  • int x - parameter that the delegate takes

Any method from any accessible class or struct that matches the delegate signature can be assigned to the delegate.

Note: A delegate is also called type-safe pointer.


Instantiate a delegate

Suppose, we have a method named calculateSum() whose signature is the same as myDelegate.

To create an instance of myDelegate, we pass a method name as a parameter. For example,

myDelegate d1 = new myDelegate(calculateSum);

Example: Calling a Method Using delegate

using System;
using System.Collections.Generic;
class Program
{
    // define a method that returns sum of two int numbers 
    static int calculateSum(int x, int y)
    {
        return x + y;
    }

// define a delegate public delegate int myDelegate(int num1, int num2);
static void Main() {
// create an instance of delegate by passing method name myDelegate d = new myDelegate(calculateSum);
// calling calculateSum() using delegate int result = d(5, 6);
Console.WriteLine(result); } }

Output

11

In the above example, we have created an instance of myDelegate d) and passed calculateSum() as a parameter.

Here, we have called the calculateSum() method by passing 5 and 6 as parameters values in d.


Use of C# delegates

We can use delegates to:

  • promote reusability of code and implement flexibility
  • notify which method to call when an event is triggered
  • define callback methods

Frequently Asked Questions

Multicast Delegate in C#

The multicast delegate is used to point to more than one method at a time. We use += operator to add methods to delegate. For example,

using System;
class Program
{
    // method that prints sum of two int numbers 
    public void sum(int x, int y)
    {
        Console.WriteLine("Sum is: " + (x + y));
    }

    // method that prints difference of two int numbers 
    public void difference(int x, int y)
    {
        Console.WriteLine("Difference is: " + (x - y));
    }

    // define a delegate of int type 
    public delegate void myDelegate(int num1, int num2);

    static void Main()
    {
        // instance of Program class
        Program obj = new Program();

        // create an instance of delegate and
        // pass sum method as a parameter 
        myDelegate d = new myDelegate(obj.sum);

// multicast delegate // calls difference() method d += obj.difference;
// pass values to two methods i.e sum() and difference() d(6, 5); } }

Output

Sum is: 11
Difference is: 1
Did you find this article helpful?

Your builder path starts here. Builders don't just know how to code, they create solutions that matter.

Escape tutorial hell and ship real projects.

Try Programiz PRO
  • Real-World Projects
  • On-Demand Learning
  • AI Mentor
  • Builder Community