首页 新闻 会员 周边

多播委托MulticastDelegate

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-04 10:07

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.即只调用后面加入的那个方法,不知道为什么。请高手指点

JustYong的主页 JustYong | 初学一级 | 园豆:7
提问于:2012-05-04 09:52
< >
分享
最佳答案
0

你这样是不行的,后面的值直接把前面的覆盖了,实际上只能获得最后一个方法调用的返回值。如果想获取多个返回值的话,

需要通过Delegate 类的GetInvocationList()静态方法来处理。请参照张子阳的文章《C#中的委托和事件》

收获园豆:10
RoyYu | 菜鸟二级 |园豆:217 | 2012-05-04 10:03
其他回答(2)
0

即只调用后面加入的那个方法,不知道为什么。

从返回值-1不能判断出只调用了后面一个方法。你在add方法return前加句Console.WriteLine("add")试试。之所以你只看到-1是因为add的返回值被你忽略掉了。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-05-04 09:55
0

多播委托,当输入参数后,每个方法会按顺序进行迭代处理,并返回最后一个方法的计算结果。

http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 你去看看里面的多播委托就明白了

xu_happy_you | 园豆:222 (菜鸟二级) | 2012-05-04 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册