Как я могу получить список основных делегатов из события, используя отражение? - PullRequest
7 голосов
/ 28 июня 2011

Во-первых, GetInvocationList() не сработает, потому что я хочу быть в состоянии получить к ним извне класса. Я предполагаю, что будет работать с некоторой магией отражения, и я пытаюсь это выяснить.

Вот что у меня сейчас есть:

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

Я просто не знаю, что делать с field. Есть идеи?

1 Ответ

9 голосов
/ 28 июня 2011

Это должно работать:

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(), если тип уже известен во время компиляции (что, я полагаю, так и есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...