1 Answers
The delegate can point to multiple methods. A delegate that points multiple methods is called a multicast delegate. The “+” or “+=” operator adds a function to the invocation list, and the “-” and “-=” operator removes it.
Example: Multicast Delegate
public delegate void MyDelegate(string msg); //declaring a delegate
class Program
{
static void Main(string[] args)
{
MyDelegate del1 = ClassA.MethodA;
MyDelegate del2 = ClassB.MethodB;
MyDelegate del = del1 + del2; // combines del1 + del2
del("Hello World");
MyDelegate del3 = (string msg) => Console.WriteLine("Called lambda expression: " + msg);
del += del3; // combines del1 + del2 + del3
del("Hello World");
del = del - del2; // removes del2
del("Hello World");
del -= del1 // removes del1
del("Hello World");
}
}
class ClassA
{
static void MethodA(string message)
{
Console.WriteLine("Called ClassA.MethodA() with parameter: " + message);
}
}
class ClassB
{
static void MethodB(string message)
{
Console.WriteLine("Called ClassB.MethodB() with parameter: " + message);
}
}
The addition and subtraction operators always work as part of the assignment: del1 += del2;
is exactly equivalent to del1 = del1+del2;
and likewise for subtraction.
If a delegate returns a value, then the last assigned target method’s value will be return when a multicast delegate called.
Example: Multicast Delegate Returning a Value
public delegate int MyDelegate(); //declaring a delegate
class Program
{
static void Main(string[] args)
{
MyDelegate del1 = ClassA.MethodA;
MyDelegate del2 = ClassB.MethodB;
MyDelegate del = del1 + del2;
Console.WriteLine(del());// returns 200
}
}
class ClassA
{
static int MethodA()
{
return 100;
}
}
class ClassB
{
static int MethodB()
{
return 200;
}
}