我必须编写 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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有问题如何编写方法运行?或者这相同,但以另一种方式,我如何才能在委托数组中使用午餐方法?
当您想要添加委托时,列表比数组更好。您可以使用通用委托类型来代替创建自定义委托类型:
List<Action<int>> delegates = new List<Action<int>>();
Run Code Online (Sandbox Code Playgroud)
要注册委托,只需将其添加到列表中即可:
public void registrate(Action<int> a) {
delegates.Add(a);
}
Run Code Online (Sandbox Code Playgroud)
要使用委托,只需在它们后面加上括号来调用它们即可。与常规方法的语法相同。例子:
int input = 5;
foreach (Action<int> a in delegates) {
a(input);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10247 次 |
| 最近记录: |