Please enable Javascript to correctly display the contents on Dot Net Tricks!

C Sharp Delegates and Plug-in Methods with Delegates

  Author : Shailendra Chauhan
Updated On : 19 Jul 2013
Total Views : 88,007   

Delegate is a reference type that holds the reference of a class method. Any method which has the same signature as delegate can be assigned to delegate. Delegate is like function pointer in C++. There are three aspects to a delegate: Declaration, Instantiation and Invocation.


A delegate is declared by using the keyword delegate, otherwise it resembles a method declaration.

 delegate int delegateAdd (int x,int y); 


To create a delegate instance, we need to assign a method (which has same signature as delegate) to delegate.

 static int Add (int x,int y) 
 return x+y;
//create delegate instance
delegateAdd objAdd= new delegateAdd (Add);
//short hand for above statement
delegateAdd objAdd=Add; 


Invoking a delegate is like as invoking a regular method.

 // Invoke delegate to call method
int result = objAdd.Invoke (3,6); 
//short hand for above statement
int result = objAdd (3,6); 

Plug-in Methods with Delegates

A method can be assigned to a delegate instance dynamically. This is useful for writing plug-in methods.In below example, The SquareData method has a delegate parameter, for specifying a plug-in SquareData.

 public delegate int delegateSquare(int x);
class Util
 public static void SquareData(int[] arr, delegateSquare obj)
 for (int i = 0; i < arr.Length; i++)
 arr[i] = obj(arr[i]);
 class demo
 static void Main()
 int[] arr = { 1, 2, 3 };
 Util.SquareData(arr, Square); // Dynamically hook in Square
 foreach (int i in arr)
 Console.Write(i + " "); // 1 4 9
 static int Square(int x)
 return x * x;

Types of Delegates

Single cast Delegate

A single cast delegate holds the reference of only single method. Above created delegate are single cast delegate.

Multi cast Delegate

A delegate which holds the reference of more than one method is called multi cast delegate. A multicast delegate only contains the reference of methods which return type is void. The + and += operators are used to combine delegate instances.

 MyDelegate d = Method1;
d = d + Method2;
//short hand for above statement
d += Method2; 

Now, Invoking d will call both methods - Method1 and Method2. Methods are invoked in the order in which they are added.

The - and -= operators are used to remove a method from the delegate instances.

 d -= Method1; 

Now, Invoking d will invoke only Method2.

Multicast delegate example

 delegate void Delegate_Multicast(int x, int y);
class demo
 static void Method1(int x, int y)
 int z=x+y;
 Console.WriteLine("Method1 is called");
 Console.WriteLine("\n Sum is : {0}",z);
 static void Method2(int x, int y)
 int z=x+y;
 Console.WriteLine("\n Method2 is called");
 Console.WriteLine("\n Sum is : {0}",z);
 public static void Main() 
 Delegate_Multicast dmulti = Method1;
 dmulti += Method2;
 dmulti(1, 2); // Method1 and Method2 are called
 dmulti -= Method1;
 dmulti(2, 3); // Only Method2 is called
Method1 is called
Sum is : 3
Method2 is called
Sum is : 5 


  1. Delegates are immutable in nature, so when you call += or -= , a new delegate instance is created and it assign to the existing delegate instance.

  2. All delegate are implicitly derived from System.MulticastDelegate, class which is inherit from System.Delegate class.

  3. Delegate types are all incompatible with each other, even if their signatures are the same.

     delegate void D1();
    delegate void D2(); 
    D1 d1 = Method1;
    D2 d2 = d1; // Compile-time error
    D2 d2 = new D2 (d1); // correct 
  4. Delegate instances are considered equal if they have the reference of same method.

    delegate void D(); 
    D d1 = Method1;
    D d2 = Method1;
    Console.WriteLine (d1 == d2); // True 
  5. Multicast delegates are considered equal if they reference the same methods in the same order.

  6. Delegates are used in event handling.

What do you think?

In this article I try to explain the delegates and its types with example. I hope after reading this article you will be able to understand delegates. I would like to have feedback from my blog readers. Please post your feedback, question, or comments about this article.

Free Interview Books
13 FEB
ASP.NET Core Development (online)

07:00 AM-09:00 AM IST( MON, WED, FRI)

Know More
25 JAN
Angular2 and Angular1 Development (online)

09:00 PM-10:30 PM IST(MON-FRI)

Know More
24 JAN
ASP.NET MVC with Angular2 Development (online)

07:00 AM-09:00 AM IST(Tuesday & Thursday)

Know More
20 JAN
NODEJS & MEAN Stack 2 Development (online)

09:00 PM-11:00 PM IST( MON, WED, FRI)

Know More
15 JAN
PPC Marketing (offline)

04:00 PM-05:300 PM

14 JAN
Xamarin Forms : Build Cross-platform Apps (offline)

05:00 PM-06:30 PM IST

10 JAN
ASP.NET MVC with AngularJS Development (online)

09:00 PM-11:00 PM IST on (TUE, THRU,SAT)

ASP.NET MVC with AngularJS Development (online)

07:00 AM-09:00 AM IST

31 DEC
ASP.NET MVC with AngularJS Development (offline)

09:30 AM-11:00 AM

31 DEC
Angular2 and Angular1 Development (offline)

11:00 AM-12:30 AM

26 NOV
ASP.NET MVC with AngularJS Development (offline)

03:00 PM-04:30 PM

ASP.NET MVC with AngularJS Development (offline)

08:00 AM-09:30 AM

MEAN Stack 2 Development (offline)

11:00 AM-12:30 PM.


Professional Speaks