13

静的クラスの静的メソッドのMethodInfoを取得しようとしています。次の行を実行すると、基本的な4つのメソッド、ToString、Equals、GetHashCode、およびGetTypeのみが取得されます。

MethodInfo[] methodInfos = typeof(Program).GetMethods();

このクラスに実装されている他のメソッドを取得するにはどうすればよいですか?

4

3 に答える 3

10
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
于 2012-06-28T14:58:12.703 に答える
6

この方法を試してください:

MethodInfo[] methodInfos = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Public);
于 2012-06-28T15:01:00.877 に答える
5

また、静的メソッドを知っていて、コンパイル時にアクセスできる場合は、ExpressionクラスをMethodInfo使用して、リフレクションを直接使用せずに取得できます(追加のランタイムエラーが発生する可能性があります)。

public static void Main()
{
    MethodInfo staticMethodInfo = GetMethodInfo( () => SampleStaticMethod(0, null) );

    Console.WriteLine(staticMethodInfo.ToString());
}

//Method that is used to get MethodInfo from an expression with a static method call
public static MethodInfo GetMethodInfo(Expression<Action> expression)
{
    var member = expression.Body as MethodCallExpression;

    if (member != null)
        return member.Method;

    throw new ArgumentException("Expression is not a method", "expression");
}

public static string SampleStaticMethod(int a, string b)
{
    return a.ToString() + b.ToLower();
}

ここでは、本体のみが使用されるため、に渡される実際のパラメーターSampleStaticMethodは重要ではないため、デフォルト値をSampleStaticMethod渡すことができます。null

于 2014-01-11T08:04:05.103 に答える