【发布时间】:2011-06-12 17:09:43
【问题描述】:
我有一个MulticastDelegate,它可以引用具有相同签名的多个(旧版)代表之一。例如:
public delegate void ObjectCreated(object sender, EventArgs args);
public delegate void ObjectDeleted(object sender, EventArgs args);
//...
然后使用这些委托来定义事件:
public event ObjectCreated ObjectWasCreated;
public event ObjectDeleted ObjectWasDeleted;
然后我有一个方法接受MulticastDelegate,我用它来做一些常见的检查:
void DispatchEvent(MulticastDelegate handler, object sender, EventArgs args)
{
if (handler != null)
{
// ...
handler.DynamicInvoke(sender, args);
}
}
从定义事件的类的其他方法中调用:
DispatchEvent(ObjectWasCreated, sender, args);
DispatchEvent(ObjectWasDeleted, sender, args);
有没有更简洁的方法来避免 DynamicInvoke?
【问题讨论】:
-
该旧代码升级到 EventHandler 的时间。在那之前,没有。
-
真正的代码不是直接使用
EventArgs,而是使用自定义子类。但是,我看不出有任何理由不应该为每个分派的事件使用相同的委托——然后我可以从 MulticastDelegate 更改为有问题的委托类型。
标签: c# events delegates multicastdelegate