namespace 带返回值的委托 { delegate int MyDel(); public class Class1 { int IntValue = 5; public int Add2(){IntValue+=2;return IntValue;} public int Add3(){IntValue+=3;return IntValue;} public Class1() { } } class Program { public static void Main(string[] args) { Class1 mc = new Class1(); MyDel mDel =new MyDel(mc.Add3); 语句一//Console.WriteLine("{0}",mDel()); mDel += new MyDel(mc.Add2); Console.WriteLine("{0}",mDel()); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } } 这段代码当没有语句一的时候输出的结果是10没有任何问题。委托会返回委托列表中最后一个函数的返回值。 当加入语句一后 我当时的想法只是想要输出委托的中间值,奇怪的事情发生的了代码居然输出的是8和13 ,我本来认为会输出8和10的。 开始我怎么也想不明白13到底是如何来的。好吧 ,后来想明白的时候才发现是我自己脑子2掉了。 原来当我执行Console.WriteLine("{0}",mDel());这个语句的时候mDel()会被执行 。这个时候是8没有任何问题 。当我执行mDel += new MyDel(mc.Add2);委托列表中有两个函数 , 这时IntValue的值是8,当我再次执行mDel()。委托列表会再次重新执行Add3和Add2() 。8+3+2 返回13