我在我的应用程序中使用了一种简单的消息代理,其中插件可以注册以通知自定义事件。嗯..像这样:
class MessageBroker
{
Dictionary<string,List<Delegate>> SubscribersToEvent;
void SubscribeToEvent(string eventName, Delegate callback);
object RaiseEvent(string eventName);
}
只要我使用相同的委托(以及所有事件的相同参数列表),这样就可以正常工作了。
是否有任何干净的方式我可以订阅/触发使用自定义委托的事件,因为参数的数量和类型可能会针对每种类型的事件而改变?
即。最后我想做点什么:
messageBroker.RaiseEvent("button1_click", new object[] { button1, parameter2, param2} )
然后又调用订阅方法
void CallbackToButton1_click(Buttton btn, string p1, int p2)
答案 0 :(得分:0)
我通过简单地将字典传递给委托作为附加参数解决了类似的问题,该附加参数仅包含特定于该事件的所有属性。缺点是编译器不能强制执行所有参数传递,但它对我有用,并且实际上从未引起任何问题。
答案 1 :(得分:0)