私はたくさんのメソッドを持つクラスを持っています。
これらのメソッドの一部は、カスタム属性によってマークされています。
これらすべてのメソッドを一度に呼び出したいと思います。
リフレクションを使用して、この属性を含むクラス内のすべてのメソッドのリストを見つけるにはどうすればよいでしょうか?
私はたくさんのメソッドを持つクラスを持っています。
これらのメソッドの一部は、カスタム属性によってマークされています。
これらすべてのメソッドを一度に呼び出したいと思います。
リフレクションを使用して、この属性を含むクラス内のすべてのメソッドのリストを見つけるにはどうすればよいでしょうか?
メソッドのリストを取得したら、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()を使用して呼び出すことができます。