创建多播委托 - 失败

时间:2014-11-20 15:38:34

标签: c# delegates

我有一个多播委托问题。

这是基于C#In A Nutshell Version 5中的一些代码。

using System;
using System.Collections;
using System.Collections.Generic;

public delegate int Transformer(int x);

class MainClass
{
    static int Square(int x) { return x * x; }
    static int Cube(int x) { return x * x * x; }

    static void Main()
    {
        Transformer t, q, multi;
        t = Square;
        q = Cube;

        multi = t + q;
        for (int i = 1; i < 5; i++)
            Console.WriteLine(multi(i));
    }
}

输出仅来自Cube。为什么添加失败?

1 个答案:

答案 0 :(得分:1)

首先运行Square方法,然后为每个值运行Cube方法。 multi()的返回值是调用列表中最后一个方法的返回值,因此您只能看到Cubes的值。

添加不会使其按预期工作。您可以通过在Console.WriteLine方法中添加Square来验证这一点。