2012-06-28 10 views
11

静的メソッドのMethodInfoを静的クラスで取得しようとしています。次の行を実行している場合、私は、基本的な4つのメソッド、ToStringメソッド、等しい、GetHashCodeメソッドおよびメソッドGetTypeます:静的クラスの静的メソッドのMethodInfoの取得

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

は、どのように私は、このクラスで実装されている他の方法を得ることができますか?

答えて

9
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
+1

その場合、私は0のメソッドを返します...同じクラスまたはmainメソッドからこれを実行するとどうなりますか? – Urik

+2

更新されました...すべてのメソッド(静的とインスタンス、公開と非公開の両方)を取得する –

+0

魅力のように!ありがとう! – Urik

0

静的メンバーに明示的に問い合わせる必要があります。これは、(あなたの静的メソッドを知っていると、コンパイル時にそれへのアクセス権を持っている場合、あなたは直接リフレクションを使用せずにMethodInfoを取得するためにExpressionクラスを使用することができます。また

MethodInfo[] methodInfos = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Public); 
+0

必ずしもそうではありません。 'Expression.Call'を使用して静的メソッドから 'MethodCallExpression'を作成する場合はどうすればよいですか? –

5

この方法を試してみてください)追加のランタイムエラーを引き起こす:SampleStaticMethodに渡さここ

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(); 
} 

実際のパラメータが0のように本体のみを問題ではありません。が使用されているので、nullとデフォルト値を渡すことができます。

2

関連する問題