如何按名称查找方法“ 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) { }
}
最佳答案
为什么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);
}