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

У меня есть класс с набором методов.

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

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

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

6
задан Diskdrive 14 May 2010 в 04:19
поделиться

2 ответа

Получив список методов, вы можете циклически запросить пользовательские атрибуты, используя метод 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.

}
7
ответ дан 8 December 2019 в 18:33
поделиться

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

6
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: