我有一组具有相同签名的事件。 现在我想知道我是否可以创建一个通用的事件处理程序引发方法来为所有事件执行此操作?
- 是否可以将事件作为
<T>
发送?
如果这一切都在一个类中,你可以创建一个方法来引发事件,该事件适用于其中任何一个。 例如,如果您的事件全部EventHandler<T>
,则可以使用:
private void RaiseEvent<T>(EventHandler<T> eventHandler, T eventArgs)
{
if (eventHandler != null)
{
eventHandler(this, eventArgs);
}
}
然后你可以通过以下方式调用它:
this.RaiseEvent(this.MyEvent, new MyEventArgs("Foo"));
对于 Reed Copsey 回复的静态版本,我创建了一个静态类Event
:
public static class Event
{
public static bool Raise<T>(Object source, EventHandler<T> eventHandler, T eventArgs) where T : EventArgs
{
EventHandler<T> handler = eventHandler;
if (handler != null)
{
handler(source, eventArgs);
return true;
}
return false;
}
}
这还假定您的事件处理程序的类型为 EventHandler<T>
.返回类型已从 void
更改为 bool
,并返回是否有事件的侦听器。很少使用,所以请随时改回void
。
用法示例:
public event EventHandler<FooArgs> FooHappend;
public void Foo()
{
Event.Raise(this, FooHappend, new FooArgs("Hello World!");
}
看到这个。它描述了你想要什么。
可以通过使用类型化委托并将其用于事件来创建类型化事件:
public delegate void myDel<T>(T stuff);
public event myDel<int> myEvent;
public doStuff()
{
myDel(1);
}