gpt4 book ai didi

c# - 委托(delegate)声明及其调用中的问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:22 24 4
gpt4 key购买 nike

当我尝试在函数 fire 中调用事件 myevent 时,它给出了编译器错误

delegate mydelegate does not take 0 arguments.

如果我尝试在调用我的事件时给出参数

myevent(this);

它再次显示错误,因为它没有采用 1 个参数。我应该在调用 myevent 时提供哪些参数?这是程序代码:

namespace useofdelegates
{
public class Class1
{ int i;
public delegate void mydelegate(object sender,EventArgs e);
public event mydelegate myevent;
public void fire()
{
myevent(this); // *** shows compiler error ***
}
}
}

最佳答案

编译器错误是因为您正在使用带有两个参数的委托(delegate)并用一个参数调用它。

简单的解决方案是

myevent(this, EventArgs.Empty);

更常规(和线程安全)的解决方案,我认为您对此感到困惑是

OnMyEvent(EventArgs.Empty);

// and then later

public void OnMyEvent(EventArgs args)
{
mydelegate handler = myevent;
if(handler != null) handler(this, args);
}

这样做的原因是您应该始终确保至少有一个处理程序附加到该事件。在检查 null 和调用处理程序之间分离处理程序的可能性很小,因此最好将它传递给另一个变量,在检查 null 之前它不能从中分离。

关于c# - 委托(delegate)声明及其调用中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328213/

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