2010-05-14 2 views
6

У меня есть класс с кучей методов.Как использовать отражение для вызова всех методов, которые имеют определенный пользовательский атрибут?

некоторые из этих методов отмечены специальным атрибутом.

Я хотел бы назвать все эти методы сразу.

Как я могу использовать отражение, чтобы найти список всех методов в этом классе, который содержит этот атрибут?

ответ

7

После того, как вы получите список методов, вы должны запрограммировать запрос для настраиваемых атрибутов с помощью метода GetCustomAttributes. Возможно, вам придется изменить BindingFlags в соответствии с вашей ситуацией.

var methods = typeof(MyClass).GetMethods(BindingFlags.Public); 

foreach(var method in methods) 
{ 
    var attributes = method.GetCustomAttributes(typeof(MyAttribute), true); 
    if (attributes != null && attributes.Length > 0) 
     //method has attribute. 

} 
6

Во-первых, вы бы вызвали typeof(MyClass).GetMethods(), чтобы получить массив всех методов, определенных для этого типа, затем выполните цикл каждого из возвращаемых методов и вызовите methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), true), чтобы получить массив пользовательских атрибутов указанного типа. Если массив имеет нулевую длину, ваш атрибут не находится в методе. Если он отличен от нуля, тогда ваш атрибут находится на этом методе, и вы можете использовать его для вызова MethodInfo.Invoke().

 Смежные вопросы

  • Нет связанных вопросов^_^