Распознать делегатов с помощью MethodInfo - PullRequest
1 голос
/ 13 июля 2011

Я хочу идентифицировать всех делегатов класса, используя отражение.Я не хочу вызывать их, просто идентифицировать.Я полагаю, что могу использовать getMembers() вот так:

Type t = myType;
MemberInfo[] mia = t.GetMembers(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).OrderBy(item => item.Name).ToArray();
foreach (MemberInfo m in mia)
{
    //Find delegates
}

РЕДАКТИРОВАТЬ : Пример делегата:

class ClassTest
{
    public delegate void SampleEventHandler(object sender, EventArgs e);
}

Это возможно с помощью этого метода или другого?

Спасибо за ваши ответы!

1 Ответ

3 голосов
/ 13 июля 2011

Делегат - это просто (специальный, сгенерированный компилятором) класс, который может быть объявлен внутри класса как вложенный тип, но имейте в виду, что они также могут быть объявлены непосредственно в пространстве имен, как обычные классы.

Это позволит вам найти все вложенные типы в данном типе t, которые являются делегатами:

private IEnumerable<Type> DelegatesDefinedInType(Type t) 
{
    var nestedTypes = t.GetNestedTypes();    
    return nestedTypes.Where(typeof(Delegate).IsAssignableFrom);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...