多播委托就是让一个委托能有若干个方法去执行,先看一个代码:
delegate int DelegateFunction(int a, int b); class Program { static void Main(string[] args) { DelegateFunction test = new DelegateFunction(Add); test += Minus; Console.WriteLine(test(2, 1)); Console.ReadKey(); } static int Add(int x, int y) { Console.Write("X + Y:"); return x + y; } static int Minus(int x, int y) { Console.Write("X - Y:"); return x - y; } }
用+=就可以建立多播委托,委托test原来有一个add方法,又+=一个Minus方法;
以上代码执行的结果是 X+Y:X-Y:1
Add方法的值没有返回回来,因为追加了委托之后就返回最后一个追加上的委托计算出的值;
需要用遍历才能让每个追加的委托返回值,需做以下修改
delegate int DelegateFunction(int a, int b); class Program { static void Main(string[] args) { DelegateFunction test = new DelegateFunction(Add); test += Minus; foreach (DelegateFunction func in test.GetInvocationList()) { Console.WriteLine(func(2, 1)); } Console.ReadKey(); } static int Add(int x, int y) { Console.Write("X + Y:"); return x + y; } static int Minus(int x, int y) { Console.Write("X - Y:"); return x - y; } }
输出结果:
X+Y:3
X-Y:1