21
NovUnderstanding Delegates in C#
Delegates in C#: An Overview
A delegate is a reference type that holds the reference of a class method. Any method that has the same signature as the delegate can be assigned to a delegate. It is very similar to the function pointer but with the difference that delegates are type-safe. We can say that it is the object-oriented implementation of function pointers. In this C# Tutorial, we will explore more about delegates which will include, types of delegates in c#, when to use delegates, and what is delegates in c#.
What are delegates?
There are three steps for defining and using delegates:
Declaration
A delegate is declared by using the keyword delegate, otherwise it resembles a method declaration.
Instantiation
To create a delegate instance, we need to assign a method (which has the same signature as a delegate) to delegate.
Invocation
Invoking a delegate is like invoking a regular method.
Example of delegates:
Let's elaborate delegates in C# Compiler with its example.
//1. Declaration
public delegate int MyDelagate(int a, int b); //delegates having same signature as method
public class Example
{
// methods to be assigned and called by delegate
public int Sum(int a, int b)
{
return a + b;
}
public int Difference(int a, int b)
{
return a - b;
}
}
class Program
{
static void Main()
{
Example obj = new Example();
// 2. Instantiation : As a single cast delegate
MyDelagate sum = new MyDelagate(obj.Sum);
MyDelagate diff = new MyDelagate(obj.Difference);
// 3.Invocation
Console.WriteLine("Sum of two integer is = " + sum(10, 20));
Console.WriteLine("Difference of two integer is = " + diff(20, 10));
}
}
Output
Sum of two integer is = 30
Difference of two integer is = 10
Read More - C# Interview Questions And Answers
Key points about delegates
Delegates are like C++ function pointers but are type-safe.
Delegates allow methods to be passed as parameters.
Delegates are used in event handling for defining callback methods.
Delegates can be chained together i.e. these allow defining a set of methods that are executed as a single unit.
Once a delegate is created, the method it is associated with will never change because delegates are immutable in nature.
Delegates provide a way to execute methods at run-time.
All delegates are implicitly derived from the System.MulticastDelegate, a class that is inherited from System.Delegate class.
Delegate types are incompatible with each other, even if their signatures are the same. These are considered equal if they have the reference of the same method.
Types of delegates
Single cast delegate
A single cast delegate holds the reference of only a single method. In the previous example, the created delegate is a single-cast delegate.
Multicast delegate
A delegate who holds the reference of more than one method is called a multi-cast delegate. A multicast delegate only contains the reference of methods whose return type is void. The + and += operators are used to combine delegate instances. Multicast delegates are considered equal if they reference the same methods in the same order.
Example
//1. Declaration
public delegate void MyDelagate(int a, int b);
public class Example
{
// methods to be assigned and called by delegate
public void Sum(int a, int b)
{
Console.WriteLine("Sum of integers is = " + (a + b));
}
public void Difference(int a, int b)
{
Console.WriteLine("Difference of integer is = " + (a - b));
}
}
class Program
{
static void Main()
{
Example obj = new Example();
// 2. Instantiation
MyDelagate multicastdel = new MyDelagate(obj.Sum);
multicastdel += new MyDelagate(obj.Difference);
// 3. Invocation
multicastdel (50, 20);
}
}
Output
Sum of integers is = 70
Difference of integer is = 30
Conclusion
I hope you will enjoy the collections and collections interfaces while programming with C#. I would like to have feedback from my blog readers. Your valuable feedback, questions, or comments about this article are always welcome. Also, Consider our C# Programming Course for a better understanding of all C# concepts.
FAQs
Take our Csharp skill challenge to evaluate yourself!
In less than 5 minutes, with our skill challenge, you can identify your knowledge gaps and strengths in a given skill.