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

Jul*_*ien 5 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) { }
}
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 6

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

  • BindingFlags.NonPublic 表示非公开成员将包含在搜索中。测试有一个名为 Button_Click 的非公共成员 (2认同)