我希望将事件传递给辅助函数.此函数将附加方法到事件.但是,我无法正确传递活动.我试过传递一个EventHandler
.它编译,但事件没有附加(但仍然添加;它似乎是事件处理程序的副本).
例如,如果我有这个:
public event EventHandlerMyEvent;
和助手功能:
public static void MyHelperFunction(EventHandler eventToAttachTo) { eventToAttachTo += (sender, e) => { Console.WriteLine("Hello world"); }; }
和来电者:
MyHelperFunction(MyEvent); MyEvent(null, new EventArgs()); // Does nothing.
JaredPar.. 17
这不起作用的原因是+ =当应用于委托时创建一个新委托,它是旧的和新的组合.它不会修改现有的委托.
为了使其工作,您将不得不通过引用传递委托.
public static void Helper(ref EventHandlere) { e+= (x,y) => {}; }
这种方法在该方法之外工作的原因是因为LHS仍然是实际的领域.所以+ =将创建一个新的委托并分配回成员字段.
这不起作用的原因是+ =当应用于委托时创建一个新委托,它是旧的和新的组合.它不会修改现有的委托.
为了使其工作,您将不得不通过引用传递委托.
public static void Helper(ref EventHandlere) { e+= (x,y) => {}; }
这种方法在该方法之外工作的原因是因为LHS仍然是实际的领域.所以+ =将创建一个新的委托并分配回成员字段.