using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateIntroduce
{
class Program
{
delegate int MathOpcDelegate(int a,int b);
static void Main(string[] args)
{
//委托关键字Delegate
//委托也可以看成是一种数据类型,可以用于定义变量,这种变量能接收的值只能是方法。
//定义一个委托
MathOpcDelegate a, b, c;
//a = Add;
//Console.WriteLine(a(4, 5));
//Console.WriteLine("---->");
//b = Sub;
//Console.WriteLine(b(4, 5));
//Console.WriteLine("---->");
//c = a + b;
//Console.WriteLine(c(4, 5));
//Console.ReadKey();
a = Add;
a += Sub;
Console.WriteLine(a(4, 5));
Console.ReadKey();
}
public static int Add(int a ,int b)
{
return a + b;
}
public static int Sub(int a, int b)
{
return a - b;
}
}
}
最后控制台输出的结果是:-1.即只调用后面加入的那个方法,不知道为什么。请高手指点
你这样是不行的,后面的值直接把前面的覆盖了,实际上只能获得最后一个方法调用的返回值。如果想获取多个返回值的话,
需要通过Delegate 类的GetInvocationList()静态方法来处理。请参照张子阳的文章《C#中的委托和事件》
即只调用后面加入的那个方法,不知道为什么。
从返回值-1不能判断出只调用了后面一个方法。你在add方法return前加句Console.WriteLine("add")试试。之所以你只看到-1是因为add的返回值被你忽略掉了。
多播委托,当输入参数后,每个方法会按顺序进行迭代处理,并返回最后一个方法的计算结果。
http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 你去看看里面的多播委托就明白了