多播委托
可以引用的多个函数的委托称为多播委托。
example:
static void Test1()
{
Console.WriteLine("Test1");
}
static void Test2()
{
Console.WriteLine("Test2");
}
static void Main()
{
//多播委托
Action a = Test1;
a += Test2; //表示添加一个委托的引用,指向了两个方法
a();
//输出为:
//Test1
//Test2
a -= Test1; //表示删除了一个委托的引用,只指向一个方法
a();
//输出为:
//Test2
a -= Tes2; //此时a不指向任何方法
a(); //出现异常!
//当一个委托没有指向任何方法时
//如果去调用这个委托
//会出现空指针的异常
}
使用多播委托可以按照顺序调用多个方法,然而多播委托只能得到调用的最后一个方法的结果。
一般来说,多播委托的返回值声明为void。
多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法出现异常,则整个迭代就会停止。
获得多播委托中所有方法的委托
example:
Action a1 = Method1;
a1 += Method2;
//获得的是一个delegate的集合
//每一个delegate都获得了一个方法的引用
Delegate[] delegates = a1.GetInvocationList();
//遍历这个集合,单独的调用其中的方法
foreach(delegate d in delegates)
d.DynamicInvoke();