如何创建通用事件提升方法

moh*_*sti 7 c# asp.net generics events event-handling

我有一组具有相同签名的事件.现在我想知道我是否可以创建一个通用事件处理程序引发方法来为所有事件执行此操作?

  • 这有可能发送一个事件<T>吗?

Ree*_*sey 11

如果这都在一个类中,您可以创建一个方法来引发适用于其中任何一个的事件.例如,如果你的事件都是EventHandler<T>,你可以使用:

private void RaiseEvent<T>(EventHandler<T> eventHandler, T eventArgs)
{
    if (eventHandler != null)
    {
        eventHandler(this, eventArgs);
    } 
}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下方式调用:

this.RaiseEvent(this.MyEvent, new MyEventArgs("Foo"));
Run Code Online (Sandbox Code Playgroud)

  • @ mohsen.d否 - 当你把它作为参数传递时,它实际上做了同样的事情.`eventHandler`成为方法中使用的"局部变量",因此您没有竞争条件. (2认同)