如何通过反射获取类及其父类的私有字段?

时间:2011-05-06 12:04:14

标签: c# reflection visibility

我在类名称空间Domain中有B类及其父类A.

  • A类,拥有私人领域a;
  • B类,有私人字段b;

然后我在名称空间Reflect中有一个Reflection Util。 如果我使用这一行

instanceOfB.GetType().GetFields(BindingFlags.NonPublic 
         | BindingFlags.Public | BindingFlags.Instance );

要找到所有字段(a& b),我只得到b。但当我a保护或公开时,我也会发现它们。

我还需要做些什么才能找到基类的私有字段?

3 个答案:

答案 0 :(得分:13)

这是documented behaviour

  

指定BindingFlags.NonPublic以在搜索中包含非公共字段(即私有,内部和受保护字段)。仅返回基类上的受保护和内部字段;不返回基类上的私有字段。

如果您需要获取私有字段,则需要询问基本类型。 (使用Type.BaseType查找基本类型,然后在其上调用GetFields。)

答案 1 :(得分:1)

instanceOfB.GetType().BaseType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance );

答案 2 :(得分:-4)

 public class A
 {
     private int aa;
 }

 public class B
 {
     private int bb;
 }

System.Reflection.FieldInfo[] fields = (new B()).GetType().GetFields(BindingFlags.NonPublic| BindingFlags.Public | BindingFlags.Instance);