如何动态订阅活动?

Bru*_*oLM 2 .net c# reflection

有关


我需要检测事件何时被触发.为此,我试图动态订阅事件.

问题是我有不同类型的委托,并非所有事件都有相同的签名.这里这里提供的解决方案需要object sender, EventArgs e我不使用,所以我得到一个异常,告诉类型不匹配.

以下是我所拥有的代表的一些例子:

public delegate void OnEventA(int id);
public delegate void OnEventB(double num, string name);
Run Code Online (Sandbox Code Playgroud)

如何创建正确的委托?

Tom*_*cek 6

EventInfo有一个AddEventHandler你可以使用的方法.如果您没有委托实例,则可以使用Delegate.CreateDelegate以下命令动态创建委托:

var eh = Delegate.CreateDelegate(ei.EventHandlerType, target, methodInfo);
ei.AddEventHandler(owner, eh);
Run Code Online (Sandbox Code Playgroud)

在此示例中target是委托的目标对象,并且methodInfo是对象MethodInfo中的方法target.最后,owner是事件ei所属的对象.