c#委托的问题,请教一下,谢谢
    delegate int NumberChange(int n);
    public static int MultOne(int num)
    {
        return num * 3;
    }
    public static int MultTwo(int num)
    {
        return num * 2;
    }


            static void Main(string[] args)
    {
                NumberChange nc1 = new NumberChange(MultOne);
        NumberChange nc2 = new NumberChange(MultTwo);
        NumberChange nc;
        nc = nc2 + nc1;
        int a = nc1(5);
        int b = nc2(5);
        int c = nc(5);
        Console.WriteLine(c);
            }

            两个委托相加,输出结果是10,为什么结果不是两个委托的和,而是nc2的值,谢谢
c#

4个回答

nc = nc1 + nc2;

委托相加的意思是指,当调用nc时,**将按顺序调用nc1和nc2**,
也就是说先调用nc1

 c = nc1(5) // 此时c=15

然后调用 nc2

  c = nc2(5) //此时c =10

最终输出c值是10。

你可以将题目代码中
nc = nc2 + nc1;
更改为
nc = nc1 + nc2;
再观察结果,以增加对委托相加的认识。

fight_in_dl
战在春秋 回复caozhy: 谢谢! 我刚查了下,回复过提问者别的问题,应该也解决了,可是不采纳。是不是论坛应该有黑名单制度,或者有什么办法。
大约 3 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 补充下,委托相加其实调用的是add方法,添加后续方法到委托链上
大约 3 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 解释地很详细了,建议楼主采纳
大约 3 年之前 回复
Nolanamy
Nolanamy 回复战在春秋: 如果参数加上ref是不是也可以
大约 3 年之前 回复
fight_in_dl
战在春秋 c = a + b 即可 或者 c = nc1(5) + nc2(5)
大约 3 年之前 回复
Nolanamy
Nolanamy 如果我想得到nc1和nc2的和,就是得到25应该怎么写
大约 3 年之前 回复

输出是15,不是10

你逻辑有问题啊
int a = nc1(5);
int b = nc2(5);
这是干什么用的,你只输出了int c = nc(5);

委托中的加号相当于事件的执行顺序没有数学中的“+”的意思,所以执行结果相当于nc(5)=nc2(5)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐