【发布时间】:2013-06-02 16:12:47
【问题描述】:
我创建了一个基于事件的系统,其中一个类将提供一堆事件,另一个类及其成员方法可以作为其事件处理程序附加到第一个类,并且...我只想做这样的事情
if(isMethodCompatibleToEvent(...))
{
connectMethodToEvent(...)
}
通过反射,连接是这样完成的:
void connectMethodToEvent(object methodTarget, MethodInfo mi,
object eventTarget, EventInfo ei)
{
Delegate handler = Delegate.CreateDelegate(ei.EventHandlerType, methodTarget, mi);
ei.AddEventHandler(eventTarget, handler);
}
如果方法与事件不兼容,它会抛出异常,为了解决这个问题,我想在创建方法委托之前创建一些检查,但是如何?
bool isMethodCompatibleToEvent(object methodTarget, MethodInfo mi,
object eventTarget, EventInfo ei)
{
// HOW ?
}
【问题讨论】:
-
-
如果您的异常来自分配
handler的行,请将CreateDelegate的重载更改为包含throwOnBindFailure为假。然后在继续之前检查handler是否变为null。如果您的异常来自第二行,AddEventHandler调用,则有些奇怪。请注意,handler的类型应该与事件的类型完全匹配(不要尝试在事件的泛型中使用逆变)。
标签: c# events reflection methods delegates