-3

クラス「***」を呼び出したいのですが、私にとってはうまくいく解決策ですが、これを呼び出したいのですが、これは私にエラーを与える解決策です:

Type t = Type.GetType(svClass);
MethodInfo method = t.GetMethod("execute", BindingFlags.instance| BindingFlags.Public);

Ret = (string)method.Invoke(null, new object[] { context.Request});
    public string execute(HttpRequest req)

私がしようとしたようにMethodInfo method = t.GetMethod("execute", BindingFlags.instance | BindingFlags.Public);

しかし、「非静的メソッドにはターゲットが必要です」というエラーが表示されます

*** これは静的メソッドの有効なソリューションです

Type t = Type.GetType(svClass);
MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public);

Ret = (string)method.Invoke(null, new object[] { context.Request});

呼び出す

public class XXXXX
    {
        public static string execute(HttpRequest req){}
    }
4

1 に答える 1

3

その秘訣は、バインディング フラグを変更して、呼び出したいメソッドのシグネチャに一致する MethodInfo を取得することです。

例えば:

 public static string execute(HttpRequest req){}

経由でアクセスされます

MethodInfo method = t.GetMethod("execute", BindingFlags.static| BindingFlags.Public);

ただし、アクセスするには

public string execute(HttpRequest req){}

あなたがする必要があります

var classObj = new Class();
MethodInfo method = classObj.GetType().GetMethod("execute", BindingFlags.Instance| BindingFlags.Public);

インスタンスは、メソッドがクラス型ではなく、クラス オブジェクトのメンバーであることを意味します。(インスタンス対静的)

var parameterArray = new object[]{ YourHttpRequestHere};
var result = method.Invoke(classObj,parameterArray);

メソッドがインスタンスに属している場合は、そのインスタンス タイプからメソッドを取得する必要があることを覚えておいてください。次に、上記のインスタンス変数 (classObj) への参照を使用してメソッドを呼び出す必要があります。

于 2016-01-27T11:49:46.683 に答える