反映继承的私有方法



我写了这个函数:

public static MethodInfo[] GetMethods<T>()
{
    return typeof(T).GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy);
}

对于不继承任何其他类型的类似乎工作得很好:

class A
{
    private void Foo() { }
}
var methods = GetMethods<A>(); // Contains void Foo()

但是,当我在继承另一个类的类上运行该函数时,它无法获得基类的私有方法:

class B : A
{
    private void Bar() { }
}
var methods = GetMethods<B>(); // Contains void Bar(), but not void Foo() :(

我知道我可以将void Foo()定义为protected,但我正在处理第三方代码,在那里我不能这样做。

那么我如何迭代一个类的私有函数和它的父类?

我通过递归地运行GetMethods来解决这个问题,直到我到达继承树的末端。

public static IEnumerable<MethodInfo> GetMethods(Type type)
{
    IEnumerable<MethodInfo> methods = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    if (type.BaseType != null)
    {
        methods = methods.Concat(GetMethods(type.BaseType));
    }
    return methods;
}

相关内容

  • 没有找到相关文章

最新更新