如何使用反射从事件中获取基础代理的列表?

时间:2011-06-28 03:40:21

标签: c# reflection

首先,GetInvocationList()不起作用,因为我希望能够从课外到达它们。我假设它使用一些反射魔法,这就是我想要弄清楚的。

这就是我现在所拥有的:

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

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

1 个答案:

答案 0 :(得分:9)

这应该有效:

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

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