按名称调用非静态方法
我一直在尝试按名称调用方法,但问题是我调用的方法不能是静态的,它必须是当前类的方法。
我尝试过这样做的方法:
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("MyNamespace.MyClass");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
null,
null,
new object[] { sender, e }
);
}
这显然只适用于静态成员,所以我尝试了类似的方法
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("this");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
null,
new object[] { sender, e }
);
}
但我得到必须指定描述所需调用操作的绑定标志(BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty) 。 参数名称:bindingFlags
错误...
那么我该怎么做呢?
编辑:
所以:
public void InvokeMenuMethod(string methodName, object sender, EventArgs e) {
Type.GetType("this").InvokeMember(
methodName,
BindingFlags.InvokeMethod,
null,
this,
new object[] { sender, e }
);
}
给出一个NullReferenceException
解决方案: Type.GetType("this") 中没有“this”
I've been trying to invoke a method by name but the problem is the method I invoke cannot be static and it needs to be of the current class.
I've tried the way of doing it like this:
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("MyNamespace.MyClass");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
null,
null,
new object[] { sender, e }
);
}
This obviously only works for static members so I tried something like this
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("this");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
null,
new object[] { sender, e }
);
}
But I get Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty).
error...
Parameter name: bindingFlags
So how can I go about doing this?
EDIT:
So:
public void InvokeMenuMethod(string methodName, object sender, EventArgs e) {
Type.GetType("this").InvokeMember(
methodName,
BindingFlags.InvokeMethod,
null,
this,
new object[] { sender, e }
);
}
Gives a NullReferenceException
Solution:
No "this" in Type.GetType("this")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试
来自 MSDN
try
From MSDN
您可以添加
BingingFlags.Instance
。You can add
BingingFlags.Instance
.