using System;
namespace MyConsoleApp
{
delegate void MyDelegate();
class A
{
public void SayYourName()
{
Console.WriteLine("My name is A");
}
}
class B
{
public void SayYourName()
{
Console.WriteLine("My name is B");
}
}
class C
{
public static void SayYourName()
{
Console.WriteLine("My name is C");
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
var b = new B();
MyDelegate ADelegate = a.SayYourName;
MyDelegate BDelegate = b.SayYourName;
MyDelegate CDelegate = C.SayYourName;
ADelegate();
BDelegate();
CDelegate();
}
}
}
As you can see it doesn't care whose method it refers to or if its static or not. Also one delegate may contain other delegates. Such a delegate is called multicast delegate and it looks like this:
using System;
namespace MyConsoleApp
{
delegate void MyDelegate();
class A
{
public void SayYourName()
{
Console.WriteLine("My name is A");
}
}
class B
{
public void SayYourName()
{
Console.WriteLine("My name is B");
}
}
class C
{
public static void SayYourName()
{
Console.WriteLine("My name is C");
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
var b = new B();
MyDelegate ADelegate = a.SayYourName;
MyDelegate BDelegate = b.SayYourName;
MyDelegate CDelegate = C.SayYourName;
ADelegate += BDelegate + CDelegate;
ADelegate(); // Now ADelegate is multicast delegate
}
}
}
If you want, you can exclude certain delegate or delegates from multicast delegate list:
using System;
namespace MyConsoleApp
{
delegate void MyDelegate();
class A
{
public void SayYourName()
{
Console.WriteLine("My name is A");
}
}
class B
{
public void SayYourName()
{
Console.WriteLine("My name is B");
}
}
class C
{
public static void SayYourName()
{
Console.WriteLine("My name is C");
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
var b = new B();
MyDelegate ADelegate = a.SayYourName;
MyDelegate BDelegate = b.SayYourName;
MyDelegate CDelegate = C.SayYourName;
ADelegate += BDelegate + CDelegate;
ADelegate -= BDelegate; // BDelegate has been excluded from ADelegate list
ADelegate();
}
}
}
No comments:
Post a Comment