Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用不同的委托类型发布/订阅_C# - Fatal编程技术网

C# 使用不同的委托类型发布/订阅

C# 使用不同的委托类型发布/订阅,c#,C#,我在我的应用程序中使用了一种简单的消息代理,插件可以注册以获得定制事件的通知。嗯。。像这样: class MessageBroker { Dictionary<string,List<Delegate>> SubscribersToEvent; void SubscribeToEvent(string eventName, Delegate callback); object RaiseEvent(string eventName); } 而这

我在我的应用程序中使用了一种简单的消息代理,插件可以注册以获得定制事件的通知。嗯。。像这样:

class MessageBroker
{
    Dictionary<string,List<Delegate>> SubscribersToEvent;

    void SubscribeToEvent(string eventName, Delegate callback);
    object RaiseEvent(string eventName);
}
而这反过来又会调用订阅的方法

   void CallbackToButton1_click(Buttton btn, string p1, int p2) 

我解决了一个类似的问题,只需将字典作为附加参数传递给委托,该参数只保存该事件特定的所有属性。缺点是编译器不能强制所有参数都被传递,但它对我很有用,而且实际上从未引起任何问题。

不要再发明轮子了

这是可以通过反射实现的,但要以速度为代价。
   void CallbackToButton1_click(Buttton btn, string p1, int p2)