-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 回答