【发布时间】:2015-10-06 22:02:00
【问题描述】:
我写了这个函数:
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,但我正在处理第三方代码,我无法这样做。
那么我如何迭代一个类的私有函数和它的父类呢?
【问题讨论】:
-
查看duplicate,查看
Type.BaseType(虽然那不是null!)。 :) -
私有成员不被继承,因此派生类型不知道它们(即使通过反射)。
-
投票重新打开,因为建议的副本只检查了一层深的继承层次结构,我想发布我当前的解决方案。
标签: c# inheritance reflection