在 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(使用前将#替换为@)