c# - 如何通过反射获取类及其父类的私有(private)字段?

标签 c# reflection visibility

我有类 B 和它的父类 A,它们都在命名空间域中。

  • A类,有私有(private)字段a;
  • B类,有私有(private)字段b;

然后我在 namespace Reflect 中有一个 Reflection Util。 如果我使用这条线

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

要查找所有字段(a 和 b),我只得到 b。但是当我将 a 设置为 protected 或公开时,我也会找到它们。

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

最佳答案

这是 documented behaviour :

Specify BindingFlags.NonPublic to include non-public fields (that is, private, internal, and protected fields) in the search. Only protected and internal fields on base classes are returned; private fields on base classes are not returned.

如果需要获取私有(private)字段,则需要询问基类型。 (使用 Type.BaseType 查找基类型,并对其调用 GetFields。)

关于c# - 如何通过反射获取类及其父类的私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911140/

相关文章:

c# - 为什么代码首先要创建索引列?

c# - 在 SignalR 中,是否可以模拟重新连接进行测试?

c# - 使用反射获取字典值

asp.net-mvc - 如何从 ValidationAttribute 内部获取模型元数据?

java - 增加界面的可视性

c# - VSTO(Outlook 加载项)设置部署 (C#)

C# 语言设计 : method group inside `is` operator

html - 如何在悬停 CSS 上添加图像和更改可见性

c# - 在 .net 4 中第二次尝试反射时获取 ReflectionTypeLoadException

c# - `ScrollToCaret` 滚动到所选文本的末尾,如何滚动到它的开头?