0

我必须编写 Eve 类才能在下面编写一些代码:

class MainClass
  {    int sum = 5;
    public  void add (int x)
    {
      sum += x;
    }
    public static void write (int x)
    {
      Console.WriteLine("x = " + x);
    }
    public static void Main (string[] args)
    {
      Eve p = new Eve();
      MainClass m = new MainClass(); 
      p.registrate(m.add);
      p.registrate(write);
      p.registrate (delegate (int x) { 
                      System.Console.WriteLine(" I have {0} ", x);
                    }); 
      p.registrate (x => System.Console.WriteLine (" Square : {0} ", x * x));
      p.run(10);
      p.run(5);
                  Console.WriteLine(" Sum is {0} ", m.sum);
    }
  }

输出:

x = 10

我有 10 个

广场:100

x = 5

我有 5

广场:25

总和是 20

所以认为我必须使用代表。并且方法 registarte 应该将委托添加到委托数组中。

我写了这样的代码,但我肯定是赖特。

 public class Eve
    {
        int i;
        public Eve()
        {
            i = 0;
        }
        public delegate void ComputeDelegate(int x);

        ComputeDelegate[] delegates = new ComputeDelegate[2];

        public void registrate(ComputeDelegate a)
        {
            if (i == 2) i = 0;
            delegates[i] += a;
            i++;
        }

        public void run()
        {
            //delegates[0].;
        }
}
        public class MainClass
        {
            int sum = 5;
            public void add(int x)
            {
                sum += x;
            }
            public void write(int x)
            {
                Console.WriteLine("x = " + x);
            }
            static void Main()
            {
                Eve proc1 = new Eve();
                MainClass m = new MainClass();

                proc1.registrate(m.add);
                proc1.registrate(m.write);


            }
        }
    }

我有问题如何编写方法运行?或者这相同,但以另一种方式,我如何在委托数组中使用午餐方法?

4

2 回答 2

4

当您想添加委托时,列表会比数组更好。您可以使用通用委托类型来代替创建自定义委托类型:

List<Action<int>> delegates = new List<Action<int>>();

要注册代表,只需将其添加到列表中:

public void registrate(Action<int> a) {
  delegates.Add(a);
}

要使用代表,只需在它们后面加上括号来调用它们。与常规方法相同的语法。例子:

int input = 5;
foreach (Action<int> a in delegates) {
  a(input);
}
于 2013-05-13T17:28:53.983 回答
0

看起来您只需要将要传递给数组中第 th 项的在delegates[0](x);哪里。xint0

delegates具有类型ComputeDelegate[]。当然,您的ComputeDelegate类型具有与 相同的签名和返回类型System.Action<int>。)

于 2013-05-13T17:30:03.170 回答