按名称调用非静态方法

Mar*_*lor 9 .net c# methods static instance

我一直在尝试按名称调用方法,但问题是我调用的方法不能是静态的,它需要是当前类.

我试过这样做的方式:

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 }
  );
}
Run Code Online (Sandbox Code Playgroud)

这显然只适用于静态成员,所以我尝试过这样的事情

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 }
  );
}
Run Code Online (Sandbox Code Playgroud)

但我得到Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty). Parameter name: bindingFlags错误......

那我怎么能这样做呢?

编辑:

所以:

public void InvokeMenuMethod(string methodName, object sender, EventArgs e) {
    Type.GetType("this").InvokeMember(
        methodName,
        BindingFlags.InvokeMethod,
        null,
        this,
        new object[] { sender, e }
    );
}
Run Code Online (Sandbox Code Playgroud)

给了一个 NullReferenceException

解决方案: 没有"这个"Type.GetType("this")

Yah*_*hia 12

尝试

 this.GetType().InvokeMember(
    methodName,
    BindingFlags.InvokeMethod,
    null,
    this,
    new object[] { sender, e }
  );
Run Code Online (Sandbox Code Playgroud)

来自MSDN

如果自己指定了InvokeMethod,则会自动包含BindingFlags.Public,BindingFlags.Instance和BindingFlags.Static