静的メソッドのMethodInfoを静的クラスで取得しようとしています。次の行を実行している場合、私は、基本的な4つのメソッド、ToStringメソッド、等しい、GetHashCodeメソッドおよびメソッドGetTypeます:静的クラスの静的メソッドのMethodInfoの取得
MethodInfo[] methodInfos = typeof(Program).GetMethods();
は、どのように私は、このクラスで実装されている他の方法を得ることができますか?
静的メソッドのMethodInfoを静的クラスで取得しようとしています。次の行を実行している場合、私は、基本的な4つのメソッド、ToStringメソッド、等しい、GetHashCodeメソッドおよびメソッドGetTypeます:静的クラスの静的メソッドのMethodInfoの取得
MethodInfo[] methodInfos = typeof(Program).GetMethods();
は、どのように私は、このクラスで実装されている他の方法を得ることができますか?
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
静的メンバーに明示的に問い合わせる必要があります。これは、(あなたの静的メソッドを知っていると、コンパイル時にそれへのアクセス権を持っている場合、あなたは直接リフレクションを使用せずにMethodInfo
を取得するためにExpression
クラスを使用することができます。また
MethodInfo[] methodInfos = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Public);
必ずしもそうではありません。 'Expression.Call'を使用して静的メソッドから 'MethodCallExpression'を作成する場合はどうすればよいですか? –
この方法を試してみてください)追加のランタイムエラーを引き起こす: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
とデフォルト値を渡すことができます。
:
その場合、私は0のメソッドを返します...同じクラスまたはmainメソッドからこれを実行するとどうなりますか? – Urik
更新されました...すべてのメソッド(静的とインスタンス、公開と非公開の両方)を取得する –
魅力のように!ありがとう! – Urik