在c#中调用非静态方法

时间:2016-01-27 09:21:09

标签: c# methods invoke bindingflags

我想调用一个类 “***”是适合我的解决方案,但我想调用 这就是给我带来错误的解决方案:

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});

1 个答案:

答案 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)的引用来调用它。