为什么 Type.GetFields() 不返回基类中的支持字段?

2024-02-17

在 C# 中,如果您使用Type.GetFields()对于表示派生类的类型,它将返回 a) 派生类中所有显式声明的字段,b) 派生类中自动属性的所有支持字段以及 c) 基类中所有显式声明的字段。

为什么基类中自动属性的 d) 支持字段缺失?

Example:

public class Base {
    public int Foo { get; set; }
}
public class Derived : Base {
    public int Bar { get; set; }
}
class Program {
    static void Main(string[] args) {
        FieldInfo[] fieldInfos = typeof(Derived).GetFields(
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.FlattenHierarchy
        );
        foreach(FieldInfo fieldInfo in fieldInfos) {
            Console.WriteLine(fieldInfo.Name);
        }
    }
}

这将仅显示 Bar 的背景字段,而不显示 Foo。


作为支持场的场对反射没有影响。支持字段的唯一相关属性是它们是私有的。

反射函数不返回private基类的成员,即使您使用FlattenHierarchy。您将需要手动遍历类层次结构并要求每个类层次结构中的私有字段。

I think FlattenHierarchy编写的目的是显示您所查看的类中的代码可见的所有成员。因此,基类成员可以被派生类中具有相同名称的成员隐藏/遮蔽,而私有成员根本不可见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Type.GetFields() 不返回基类中的支持字段? 的相关文章

随机推荐

  • Apple 推送通知服务是否存在隐私问题?

    我一直在广泛阅读 APNS 的内容 并且很好奇是否有人熟悉 Apple 在服务器端日志记录方面的立场 为了允许推送通知 每个设备 例如 iPhone 与服务建立经过认可的加密 IP 连接 并通过此持久连接接收通知 Source https
  • PHP 不使用 ajax 将超过 91 行的表单数据插入数据库

    我试图向数据库插入超过 150 行 但发布请求仅发生 91 行 并且控制台日志显示内部服务器错误 插入91行后出现错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 1 行 附近使用的正确语法 我的 H
  • 为什么java 7不能使用菱形运算符和多重catch语句

    嗯 使用 Java 7 1 7 0 67 并将项目语言级别设置为 7 Diamonds ARM multi catch 我的代码如下 使用 maven 构建时抛出编译错误的行 private Map
  • 在 Galaxy S 上无法从相机获取全尺寸图像

    我在从 Samsung Galaxy S 上的内置相机应用程序捕获图像时遇到问题 我的应用程序上有一个按钮 按下该按钮即可启动相机 ContentValues values new ContentValues values put Imag
  • 如何在 woocommerce 中自动发送带有立即付款链接的发票?

    当客户在 woocommerce 中订购产品时 我想通过电子邮件自动发送带有结账链接的发票 尽管可以手动发送电子邮件 You can override https docs woocommerce com document template
  • 安装“Cairocffi”失败

    我正在使用 python3 并且我正在尝试安装 凯罗菲 在Ubuntu上 为此 我已成功安装 蟒蛇开发 libffi 开发 cffi 但是当我尝试安装 cairocffi 时pip install cairocffi I got File
  • 为什么这个 dos 命令在 python 中不起作用?

    我尝试将批处理文件中的一些 dos 命令移至 python 中 但出现此错误 对于以下语句 文件名 目录名或卷标语法不正确 subprocess Popen rd s q ProcessControlSimulator bin shell
  • Scalastyle 布尔表达式可以简化

    Scalastyle intellij 2016 1默认值 表示这个布尔表达式可以简化 val t Option true val f Option false if t contains true f contains false pri
  • 我可以让 javascript 同时做两件事吗?

    我有一个奇怪的需求 我想在 javascript 中执行以下操作 当一个函数被调用时我想要 更改 DIV 的颜色并 然后 1 2 秒后我想 把它改回来 与 1 同时 我会 比如进行 Ajax 调用 电话 通常需要一秒钟 换句话说 我希望步骤
  • 木偶在循环中添加数组元素

    我想要这样的东西 ssl domains dev mydomain com admin api web each site tom jeff harry each developer ssl domains lt lt site devel
  • 使用 Chef 时主管打开文件限制不会改变

    我正在机器上修改 etc security limits conf 然后在 Chef 配方中安装 Supervisor 菜谱运行完成后 如果我运行cat proc
  • DNSPython 异步解析超时,但同步解析不会超时

    我在 Python 3 9 7 x64 dnspython 2 1 0 和 Windows 10 21H1 上执行了测试 问题很简单 dns resolver Resolver 工作正常但不dns asyncresolver Resolve
  • 使用相同的密钥签署两个应用程序

    我构建了两个应用程序 第一个应用程序 com pakname pak1 第二个应用程序使用 com pakname pak2 包名称 然后我得到了一个密钥 mykey keystore 如果我使用相同的密钥对这两个应用程序进行签名并将它们发
  • 在手机上自动播放视频? Facebook Home 做到了。我缺少什么?

    我正在尝试将视频添加到我的主页来代替滑块 我了解移动设备如何以及为何禁用自动播放 但是 FacebookHome 和 Youtube 将在移动设备上自动播放 https bg bg facebook com home https bg bg
  • 在 Firemonkey 中获取应用程序路径

    因此 在 VCL 中 可以使用以下代码行来检索应用程序路径 ExtractFilePath Application ExeName 我尝试了同样的 Firemokey 我注意到 ExeName 不再可用 我可以使用什么代码来替代这个 尝试使
  • 导轨型号

    我有一个名为 test rb 的模型 当我在控制器中使用 tests Test new 时 出现以下错误 有人可以告诉我如何解决这个问题吗 测试 模块的未定义方法 新 如果您认为存在命名冲突 则看起来 test 已经是名为 Test 的模块
  • 如何使用-webkit-animation - 向外环创建脉冲效果

    我找到了这篇文章 http www zurb com article 221 css3 animation will rock your world http www zurb com article 221 css3 animation
  • 像编辑文本一样的旋转器

    我有一个带有 TextInputLayout TextInputEditText 和微调器的表单 我想要微调器高度换行文本 但下拉列表中有大项目 问题是微调器的高度取决于下拉项的高度 simple spinner dropdown item
  • JavaFX:使用REST服务并在前端显示数据

    我正在开发一个 JavaFX 在带有 SceneBuilder 的 JDK8 上 项目 该项目应该与基于 Spring MVC 的服务器连接 我想从服务器访问一些对象并显示它 我已经对 Spring 服务器进行了编程 以根据请求返回所需的对
  • 为什么 Type.GetFields() 不返回基类中的支持字段?

    在 C 中 如果您使用Type GetFields 对于表示派生类的类型 它将返回 a 派生类中所有显式声明的字段 b 派生类中自动属性的所有支持字段以及 c 基类中所有显式声明的字段 为什么基类中自动属性的 d 支持字段缺失 Exampl