如何通过名称找到我的方法“button_Click”?如果我公开它,它会起作用,但我宁愿将其私有化。
class Test : BaseTest
{
public Test()
{
LoadMethod();
}
}
class BaseTest
{
public void LoadMethod()
{
//WHY IS THIS NULL???
var eventMethod = GetType().GetMethod("button_Click", BindingFlags.NonPublic | BindingFlags.Instance);
}
void button_Click(object sender, EventArgs e) { }
}
Run Code Online (Sandbox Code Playgroud)
为什么
GetMethod返回null?
因为运行时类型不是 类型BaseTest,所以它是 类型Test,并且Test没有定义名为 的方法button_Click(因为它在private基类中)。
如果您拆分GetType()调用并运行调试器,您将看到返回的类型为 类型Test。
如果你打电话GetType().BaseType,那么你实际上会看BaseTest:
var baseType = GetType().BaseType;
if (baseType != null)
{
var eventMethod = baseType.GetMethod("button_Click", BindingFlags.NonPublic |
BindingFlags.Instance);
}
Run Code Online (Sandbox Code Playgroud)