gpt4 book ai didi

c# delegate 没有正常工作?

转载 作者:可可西里 更新时间:2023-11-01 08:54:05 24 4
gpt4 key购买 nike

我对 C# 有点陌生,所以我想到了这个问题。问题:为什么调用func2?哦,还有一件事。假设我向委托(delegate)添加了一个函数。在这个函数中我调用了另一个委托(delegate),但是我想确保在这个函数调用这个委托(delegate)之前调用添加到第一个委托(delegate)的所有其他函数,是否有任何干净的解决方案(对 getInvocationList 并不真正感兴趣)。谢谢你们,你们是最棒的。

class Program
{
delegate void voidEvent();
voidEvent test;

private void func1()
{
Console.Write("func1");
test -= func2;
}

private void func2()
{
Console.WriteLine("func2");
}

static void Main(string[] args)
{
Program p = new Program();
p.test += p.func1;
p.test += p.func2;
p.test();
}
}

最佳答案

每次您更改委托(delegate)(+= 或 -=)时,您实际上是在创建调用列表(将被调用的方法)的完整副本。

因此,当您调用 p.test(); 时,您将在那个时间点调用调用列表中的每个委托(delegate)。在其中一个处理程序中更改 this 将为下一次调用更改它,但不会更改当前正在执行的调用。

关于c# delegate 没有正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com