0

わかりました、これは私がやりたいことです:

public static void CallStaticMethod(Type myType, String methodName, Object[] parameters)
{
     MethodInfo m = myType.GetMethod(methodName); // make this compile-time safe
     m.Invoke(null, parameters);                  // methodName method is supposed to be static
}

これで、「methodName」が存在しない場合、myType.GetMethod(methodName)が実行時に失敗する可能性があります。
このコンパイル時を安全にする方法はありますか?
(パラメーターが正しいと仮定して)

どういうわけか次のようにメソッドを呼び出したいと思います。

CallStaticMethod(()=>MyType.MyMethod(), Object[] parameters)

ラムダ式内で引数を指定する必要があるため、これは機能しないことに注意してください。

つまり、メソッドのコンパイル時の安全なハンドルが必要です。typeof()を使用して型で取得できますが、メソッドで取得できますか?

4

1 に答える 1

3

関数ポインタ、つまりデリゲートを使用します。簡単な例:

delegate int StringIntParse(string value);

    public static int Main(string[] args)
    {
        StringIntParse p = int.Parse;
        Console.WriteLine(p("34"));
        Console.WriteLine(p.DynamicInvoke(new object[] { "43" }));
        return 0;
    }

DynamicInvokeは、次のような任意のデリゲートで使用できます。

static object InvokeAnyDelegate(Delegate d, params object[] args)
{
    return d.DynamicInvoke(args);
}
于 2011-01-13T17:19:51.160 に答える