为什么不执行带有反射的方法
本文关键字:反射的 方法 行带 执行 为什么不 | 更新日期: 2023-09-27 18:16:45
我正试图从反射中执行类中的方法。尽管方法存在,我仍然得到MethodNotFound异常
public virtual void ExecuteMethod(string MethodName)
{
if(this is ISelectable)
{
Type thisType = (this as ISelectable).GetType();
thisType.InvokeMember(MethodName, BindingFlags.InvokeMethod | BindingFlags.Public , null, null, null);
}
}
public virtual void Add( ) { }
也许值得说的是,这个方法位于基类中,而ExecuteMethod是在子类上调用的。我觉得这不重要,但不管怎样。
您指定了要执行的方法,但没有指定要在哪个对象上执行该方法。你不能只在类型上执行一些东西,你需要指定一个具体的对象。您使用该类型获取方法的元数据,然后使用该信息在实际对象上调用该方法。请查看此MSDN页面了解更多详细信息。
倒数第二个null
应该是对象,在你的例子中可能是this
。
来自文档:
必须指定
Instance
或Static
以及Public
或NonPublic
或不返回任何成员。
从代码看来,在您的情况下,方法是static
,所以添加BindingFlags.Static
。
尝试发送一个具有
方法的对象实例thisType.InvokeMember(MethodName, BindingFlags.InvokeMethod | BindingFlags.Public, null
, this // instance of the object which has the method
, null);
这是另一种方式
MethodInfo _methodinfo= type.GetMethod(MethodName);
_methodinfo.Invoke(null, null)