C# 如何生成代理数组并使用此数组?

C# 如何生成代理数组并使用此数组?,c#,delegates,C#,Delegates,我必须编写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类来编写以下代码:

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

所以我想我必须使用代理。方法寄存器应该将委托添加到委托数组中

我写了这样的代码,但我不能肯定是wright

 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);


            }
        }
    }

我有问题,我必须如何写方法运行?或者这是相同的,但从另一个角度看,我如何在委托数组中使用方法?

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

List<Action<int>> delegates = new List<Action<int>>();
List委托=新建列表();
要注册代理,只需将其添加到列表中:

public void registrate(Action<int> a) {
  delegates.Add(a);
}
公开作废登记(行动a){
增加(a);
}
要使用代理,只需在它们后面加括号即可调用它们。与常规方法的语法相同。例如:

int input = 5;
foreach (Action<int> a in delegates) {
  a(input);
}
int输入=5;
foreach(代理中的操作a){
a(输入);
}

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

List<Action<int>> delegates = new List<Action<int>>();
List委托=新建列表();
要注册代理,只需将其添加到列表中:

public void registrate(Action<int> a) {
  delegates.Add(a);
}
公开作废登记(行动a){
增加(a);
}
要使用代理,只需在它们后面加括号即可调用它们。与常规方法的语法相同。例如:

int input = 5;
foreach (Action<int> a in delegates) {
  a(input);
}
int输入=5;
foreach(代理中的操作a){
a(输入);
}

看起来您只需要
委托[0](x)
其中
x
是要传递到数组中第
0
项的
int


委托
具有类型
ComputeDelegate[]
。您的
ComputeDelegate
类型与
系统操作
具有相同的签名和返回类型。)

看起来您只需要
委托[0](x)
其中
x
是要传递到数组中第
0
项的
int


委托
具有类型
ComputeDelegate[]
。您的
ComputeDelegate
类型具有与
系统相同的签名和返回类型。当然,操作

你为什么要编写自己的
事件
类,而不是仅仅在C#中使用
事件
关键字?我猜是因为作业是为了帮助理解如何以及为什么可能实现
事件
。@Mikeb或者他可能不知道已经存在
事件
关键字。我想听听他为什么不能使用它。这个名称类是唯一的名称类而不是更多。我询问如何在委托数组中运行方法。这可以通过使用C#中的
事件
关键字来实现,或者通过使用多播委托和操作符
+
/
-
/
+=
/
-=/code>,或者通过调用/而不是使用数组来实现。另请看这个问题:为什么您要编写自己的
Event
类,而不是在C#中使用
Event
关键字?我猜是因为任务是帮助理解如何以及为什么
Event
可以实现?@Mikeb或者他可能不知道已经存在
Event
关键字。我想听听他为什么不能使用它。这个名称类是唯一的名称类而不是更多。我询问如何在委托数组中运行方法。这可以通过使用C#中的
事件
关键字来实现,或者通过使用多播委托和操作符
+
/
-
/
+=
/
-=/code>,或者通过调用/而不是使用数组来实现。另请看这个问题:是的,这正是我需要的。我认为这是一个简单的问题,但我是C语言的新手,我用这种语言写了大约50行代码。是的,这正是我需要的。我认为这是一个简单的问题,但我完全是C语言的新手,我用这种语言写了大约50行代码。