当前位置:  开发笔记 > 编程语言 > 正文

如何将事件传递给C#中的函数?

如何解决《如何将事件传递给C#中的函数?》经验,为你挑选了1个好方法。

我希望将事件传递给辅助函数.此函数将附加方法到事件.但是,我无法正确传递活动.我试过传递一个EventHandler.它编译,但事件没有附加(但仍然添加;它似乎是事件处理程序的副本).

例如,如果我有这个:

public event EventHandler MyEvent;

和助手功能:

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 EventHandler e)
{
    e+= (x,y) => {};
}

这种方法在该方法之外工作的原因是因为LHS仍然是实际的领域.所以+ =将创建一个新的委托并分配回成员字段.



1> JaredPar..:

这不起作用的原因是+ =当应用于委托时创建一个新委托,它是旧的和新的组合.它不会修改现有的委托.

为了使其工作,您将不得不通过引用传递委托.

public static void Helper(ref EventHandler e)
{
    e+= (x,y) => {};
}

这种方法在该方法之外工作的原因是因为LHS仍然是实际的领域.所以+ =将创建一个新的委托并分配回成员字段.


使用ref的问题:如果我使用Helper(ref myClassInstance.MyEvent),我会收到以下错误:事件MyEvent只能出现在+ =或 - =的左侧(除非在MyClass类型中使用).我该如何解决这个问题?
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有