1

我正在尝试通过反射从类中执行一个方法。尽管该方法存在,但我仍然收到 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。我认为这不重要,但无论如何。

4

4 回答 4

1

文档中:

您必须指定InstanceStatic连同PublicNonPublic不返回任何成员。

从代码看来,在你的情况下方法是static,所以添加BindingFlags.Static

于 2013-06-04T08:49:13.527 回答
1

您已经指定了要执行的方法,但没有指定要在哪个对象上执行它。您不能只在type上执行某些操作,您需要指定一个具体对象。您使用类型来获取方法的元数据,然后使用该信息在实际对象上调用该方法。查看此 MSDN 页面以获取更多详细信息。

倒数第二个null应该是对象,可能this在您的情况下。

于 2013-06-04T08:50:22.530 回答
1

尝试发送具有该方法的对象的实例

thisType.InvokeMember(MethodName, BindingFlags.InvokeMethod | BindingFlags.Public, null
    , this // instance of the object which has the method
    , null);
于 2013-06-04T09:00:51.790 回答
0

这是另一种方式

MethodInfo _methodinfo= type.GetMethod(MethodName);
_methodinfo.Invoke(null, null)
于 2013-06-04T08:51:01.583 回答