2

文字列に名前しかない場合、C#にメソッドを実行する方法があるかどうか知りたいですか?

string methodname="method"
this.RunMethod(methodname)

そんな感じ ?

ありがとう :)

4

7 に答える 7

2

これを試して:

Type t = Type.GetType(typeName);
t.InvokeMember("method", BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
于 2012-04-26T13:38:39.280 に答える
0

タイプ、メソッド名、およびメソッドが静的でない場合はインスタンスが必要です

リフレクションの確認:パラメーターを使用してメソッドを呼び出す方法

于 2012-04-26T13:38:50.327 に答える
0

これは、拡張メソッドを使用して非常にうまく行うことができます。

public static class MethodEx
{
    public static void RunMethod(
         this object target,
         string methodName,
         params object[] values)
    {
        var type=target.GetType();
        var mi = 
          type.GetMethod(methodName,values.Select(v=>v.GetType()).ToArray());
        mi.Invoke(target,values);
    }
}

...そしてそれを次のように使用します:

void Main()
{
    var m=new Monkey();
    m.RunMethod("A",1);
    m.RunMethod("A","frog");
}

class Monkey
{
    public void A(int a)
    {
        Console.WriteLine("int A called");
    }
    public void A(string s)
    {
        Console.WriteLine("string A called");
    }
}

これは、提供されたパラメーターに従って適切なオーバーロードを選択するため、上記のコードは次のように出力します。

intAと呼ばれる

文字列Aと呼ばれる

より良いエラー処理はOPに任せます。

于 2012-04-26T13:50:01.210 に答える
0

何かのようなもの

Type type = GetType("MyType");
MethodInfo methodInfo = type.GetMethod(methodName);
methodInfo.Invoke()
于 2012-04-26T13:38:01.257 に答える
0

私はこのようなseomthingを使用しました:

typeof(StringValidator<T>).GetMethod(restriction.Operacion.Nombre).Invoke(null, param) as IList<T>;

メソッド(StringValidator)を含むクラスのタイプに基づいて、名前restriction.Operacion.Nombreでメソッドを取得し、呼び出します。

それが役に立てば幸い

于 2012-04-26T13:38:31.623 に答える
0

この例には、あなたが探しているものがあります。

String s = (String)calledType.InvokeMember(
                methodName,
                BindingFlags.InvokeMethod | BindingFlags.Public | 
                    BindingFlags.Static,
                null,
                null,
                null);

(明らかに、これは返品タイプなどによって変わる可能性があります。)

于 2012-04-26T13:38:38.150 に答える
0

この方法で、任意のインスタンスで名前でメソッドを呼び出すジェネリックメソッドを作成できます。

public void RunMethodOn(object obj, String methodName,params Object[] args)
        {
            if(obj != null)
            {
                System.Reflection.MethodInfo method = null;
                method = obj.GetType().GetMethod(methodName);
                if (method != null)
                    method.Invoke(obj, args);
            }
        }

そして、あなたが尋ねるときにそれを使ってあなた自身のインスタンスのメソッドを呼び出してください:

public void RunMethod(String methodName,params Object[] args)
            {
                   ExecuteOn(this, methodName, args);
            }
于 2012-04-26T13:44:14.120 に答える