如何按名称查找方法“ 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);
}

09-20 14:58