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

标签 c# delegates

我希望将事件传递给辅助函数。此函数将一个方法附加到事件。但是,我无法正确通过该事件。我试过传递 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/

相关文章:

c# - 分配 Action<T> 方法和订阅 Action<T> 事件之间的区别

c# - 如何重新排列上下文菜单条中的项目?

c# - NHibernate 3、动态组件、字典和 LINQ 查询

c# - 如何检查 MethodInfo 是否匹配泛型 T 的委托(delegate),其中 T 是 Action 还是 Func?

c# - 使用标准 try/catch 包装对类方法的调用

java - 需要通过java代码将.json文件插入MongoDB

c# - 为什么我在 Entity Framework 和 SQL Server 事务中得到不同的结果?

objective-c - 使用委托(delegate)协议(protocol)初始化

Cocoa:对使用 CoreData 和 Bindings 与 UI 对象交互感到困惑

ios - 从应用程序委托(delegate)访问全局变量