Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get a list of the underlying delegates from an event using reflection?

Tags:

c#

reflection

First, GetInvocationList() won't work, because I want to be able to get to them from outside the class. I assume it will work with some reflection magic, and that's what I'm trying to figure out.

Here's what I have right now:

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

I just don't know what to do with field. Any ideas?

like image 525
ryeguy Avatar asked Jun 28 '11 03:06

ryeguy


1 Answers

This should work:

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();
}

Also you should use typeof(SomeFooClass) instead of fooEventDispatcher.GetType() if the type is already known at compile time (which I assume it is).

like image 104
BrokenGlass Avatar answered Oct 12 '22 22:10

BrokenGlass