У меня есть класс с набором методов.
некоторые из этих методов отмечены пользовательским атрибутом.
Я хотел бы назвать все эти методы сразу.
Как я пошел бы об использовании отражения для нахождения списка всех методов в том классе, который содержит этот атрибут?
Получив список методов, вы можете циклически запросить пользовательские атрибуты, используя метод 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.
}
Сначала вы должны вызвать typeof (MyClass) .GetMethods () , чтобы получить массив всех методов, определенных для этого типа, затем вы перебираете каждый из возвращаемых им методов и вызываете methodInfo.GetCustomAttributes (typeof (MyCustomAttribute), true) , чтобы получить массив настраиваемых атрибутов указанного типа. Если массив имеет нулевую длину, значит, ваш атрибут отсутствует в методе. Если он не равен нулю, значит, ваш атрибут находится в этом методе, и вы можете использовать MethodInfo.Invoke () для его вызова.