我希望将事件传递给辅助函数。此函数将一个方法附加到事件。但是,我无法正确通过该事件。我试过传递 EventHandler<TEventArgs>
.它编译,但没有附加事件(但仍被添加;似乎制作了事件处理程序的副本)。
例如,如果我有这个:
public event EventHandler<EventArgs> MyEvent;
辅助函数:
public static void MyHelperFunction<TEventArgs>(EventHandler<TEventArgs> eventToAttachTo)
{
eventToAttachTo += (sender, e) => { Console.WriteLine("Hello world"); };
}
调用者:
MyHelperFunction(MyEvent);
MyEvent(null, new EventArgs()); // Does nothing.
最佳答案
这不起作用的原因是 += 当应用于委托(delegate)时会创建一个新委托(delegate),它是旧委托(delegate)和新委托(delegate)的组合。它不会修改现有委托(delegate)。
为了使其正常工作,您必须通过引用传递委托(delegate)。
public static void Helper(ref EventHandler<EventArgs> e)
{
e+= (x,y) => {};
}
这在方法之外起作用的原因是因为 LHS 仍然是实际字段。所以 += 将创建一个新的委托(delegate)并分配回成员字段。
关于c# - 如何将事件传递给 C# 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623716/