我想调用一个类 “***”是适合我的解决方案,但我想调用 这就是给我带来错误的解决方案:
function test_fn1() {
document.getElementById("demo").innerHTML = "<span onclick=\"delete_fn('111-aaaa')\">delete</span>";
}
function delete_fn(no_delete)
{
alert(no_delete);
}
所以我尝试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});
答案 0 :(得分:1)
秘诀是更改绑定标志以获得与您要调用的方法的签名匹配的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)的引用来调用它。