为什么不执行带有反射的方法

本文关键字:反射的 方法 行带 执行 为什么不 | 更新日期: 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

来自文档:

必须指定InstanceStatic以及PublicNonPublic或不返回任何成员。

从代码看来,在您的情况下,方法是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)