En C#, si usa Type.GetFields()
con un tipo que representa una clase derivada, devolverá a) todos los campos declarados explícitamente en la clase derivada, b) todos los campos de respaldo de propiedades automáticas en la clase derivada yc) todos los campos explícitamente declarados en la clase base.¿Por qué Type.GetFields() no devuelve campos de respaldo en una clase base?
¿Por qué faltan los campos de respaldo d) de propiedades automáticas en la clase base?
Ejemplo:
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);
}
}
}
Esto mostrará sólo el campo respaldo de Bar, no Foo.
FlattenHierarchy tiene el siguiente comentario Especifica que los miembros estáticos públicos y protegidos por la jerarquía deben ser devueltos . Los miembros estáticos privados en clases heredadas no se devuelven. Los miembros estáticos incluyen campos, métodos, eventos y propiedades. Los tipos anidados no se devuelven. Aquí se menciona la palabra estática, que me hace pensar que no funcionará para ninguno de los miembros estáticos – R2D2