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