In C#, se si utilizza Type.GetFields()
con un tipo che rappresenta una classe derivata, restituirà a) tutti i campi esplicitamente dichiarati nella classe derivata, b) tutti i campi di supporto delle proprietà automatiche nella classe derivata ec) tutti i campi esplicitamente dichiarati nella classe base.Perché Type.GetFields() non restituisce i campi di supporto in una classe base?
Perché i d) campi di appoggio delle proprietà automatiche nella classe base sono mancanti?
Esempio:
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);
}
}
}
Questo mostrerà solo il campo appoggio di bar, non Foo.
FlattenHierarchy ha il seguente commento Specifica che i membri statici pubblici e protetti della gerarchia dovrebbero essere restituiti. I membri statici privati nelle classi ereditate non vengono restituiti. I membri statici includono campi, metodi, eventi e proprietà. I tipi annidati non vengono restituiti. Menziona la parola static qui, che mi fa pensare che non funzionerà per nessuno membri statici – R2D2