首先,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()

10-07 12:11