多播委托,顾名思义即使一个委托引用多个方法
举列
static void Test1 { Console.writLine(“test1”); } static void Test2 { Console.writLine("test2"); } static void Main(string[] args) { Action a = Test1; a += Test2//添加一个委托的引用 所以删除一个委托的应用为a -=Test2 a(); Console.ReadKey(); }
虚注意的几点为:1.当一个委托没有指向任何一个方法的时候,调用的话会出现异常null;
2.按照顺序调用方法
3.多播委托只能得到调用的最后一个方法的返回值
4.在多播委托逐一调用方法时,有一个方法抛出异常,整个迭代就会停止
下面这一委托为取得多播委托中所有方法的委托:
Action a1 = Method1;
a1+=Method2;
Delegate[] delegates=a1.GetInvocationList();
foreach(delegate d in delegates)
{
//d();
d.DynamicInvoke(null);
} 遍历多播委托中所有的委托,然后单独调用
举列
static void Test1 { Console.writLine(“test1”); } static void Test2 { Console.writLine("test2"); } static void Main(string[] args) { Action a = Test1; a += Test2 Delegate[] delegetes=a.GetInvocationList();//使用GetInvocationList()把委托a中的方法传递给delegetes数组
foreach(Delegate de in delegetes)
{
de.DynamicInvoke(); //明确知道类型的用Invoke()方法调用会接省时间
}
Console.Readkey();
}