In C#, quando rifletto su un tipo derivato, come mai non vedo i campi statici delle classi di base?Rif. C# - Campi statici della classe base in Tipo derivato
Ho provato sia type.GetFields(BindingFlags.Static)
e type.GetFields()
.
In C#, quando rifletto su un tipo derivato, come mai non vedo i campi statici delle classi di base?Rif. C# - Campi statici della classe base in Tipo derivato
Ho provato sia type.GetFields(BindingFlags.Static)
e type.GetFields()
.
Questo è come funziona. I membri static
sono davvero roba non orientata agli oggetti. Non sono polimorfici e appartengono davvero al loro tipo di dichiarazione e non sono correlati ad altri tipi nella gerarchia dell'ereditarietà. Ad esempio, non è necessario eseguire un inizializzatore statico per una classe base prima di accedere a un membro statico in una classe derivata.
static
membri delle classi base non vengono restituiti a meno che non sia specificato BindingFlags.FlattenHierarchy
:
type.GetFields(BindingFlags.Static
| BindingFlags.FlattenHierarchy
| BindingFlags.Public)
Perché appartengono al tipo di base e non sono ereditati. Sposta fino a quel tipo e li troverai.
- Modifica
Mehrdad ha la risposta giusta, ma solo per completezza:
foreach(FieldInfo f in b.GetType().GetFields(
BindingFlags.Static
| BindingFlags.FlattenHierarchy
| BindingFlags.Instance
| BindingFlags.Public
)){
Console.WriteLine("found: " + f.Name);
}
tuo tipo è solo il tuo tipo - non include tipi di base. Avrai bisogno di usare BindingFlags.FlattenHierarchy
se vuoi cercare campi nelle classi base.
Probabilmente dovresti dare un'occhiata allo BindingFlags documentation per ottenere ciò che ti serve.
Impostare l'enumerazione BindingFlags.FlattenHierarchy su Statico e cercherà anche i membri statici. Ulteriori informazioni: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx
Va notato che questo non troverà * statica privata * su una classe base. Nel caso in cui sia ciò che l'OP sta cercando di fare. – womp
Sì, quello era solo un esempio. Basta aggiungere "BindingFlags.NonPublic' nel caso in cui ne hai bisogno. –
Che ancora non lo farà in realtà. Devi riflettere su campi statici privati direttamente sulla classe base. Anche se spero che OP non stia provando a farlo;) – womp