如何使用反射从事件中获取基础委托的列表



首先,GetInvocationList()不起作用,因为我希望能够从类外访问它们。我想它与一些反射魔法一起工作,这就是我试图弄清楚的。

以下是我现在拥有的:

fooEventDispatcher.GetType().GetField("FooEvent", BindingFlags.Instance | BindingFlags.NonPublic);
var field = fieldInfo.GetValue(fooEventDispatcher);

我只是不知道该怎么处理field。有什么想法吗?

这应该有效:

var fieldInfo = fooEventDispatcher.GetType().GetField(
                "FooEvent", BindingFlags.Instance | BindingFlags.NonPublic);
var eventDelegate = fieldInfo.GetValue(fooEventDispatcher) as MulticastDelegate;
if (eventDelegate != null) // will be null if no subscribed event consumers
{
   var delegates = eventDelegate.GetInvocationList();
}

此外,如果类型在编译时已知(我认为是已知的),则应该使用typeof(SomeFooClass)而不是fooEventDispatcher.GetType()

相关内容

  • 没有找到相关文章