C# 如何生成代理数组并使用此数组?
我必须编写Eve类来编写以下代码: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) {
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行代码。