通过反射在基类中查找私有方法

时间:2015-03-11 14:29:17

标签: c# reflection

如何按名称找到我的方法“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) { }
}

1 个答案:

答案 0 :(得分:3)

  

为什么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);
}