Sono un principiante assoluto alla riflessione in C#. Voglio usare reflection per accedere a tutti i campi privati di una classe, compresi quelli che sono ereditati.C#: accesso ai membri di istanze private ereditate tramite Riflessione
Sono riuscito ad accedere a tutti i campi privati, esclusi quelli che sono ereditati, così come tutti i campi ereditati pubblici e protetti. Tuttavia, non sono stato in grado di accedere ai campi privati ereditati. Il seguente esempio illustra:
class A
{
private string a;
public string c;
protected string d;
}
class B : A
{
private string b;
}
class test
{
public static void Main(string[] Args)
{
B b = new B();
Type t;
t = b.GetType();
FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance);
foreach(FieldInfo fi in fields){
Console.WriteLine(fi.Name);
}
Console.ReadLine();
}
}
Questo non riesce a trovare il campo B.a.
È persino possibile eseguire questo? La soluzione ovvia sarebbe convertire i campi privati ereditati in campi protetti. Questo, tuttavia, è fuori dal mio controllo al momento.
Invece della clausola "if" per ignorare i campi ereditati, è sufficiente specificare BindingFlags.DeclaredOnly. – Timwi
con fuori utilizzando BaseType su un tipo, possiamo ancora accedere al membro privato della classe Base. No, non sto risolvendo alcun problema del mondo reale per me, ma sono solo curioso perché usando la proprietà BaseType della classe Type sono convinto che (mentre lo scrivo) sto accedendo ai membri della classe base di Childs, quindi c'è un altro modo senza usare Proprietà BaseType per ottenere lo stesso risultato? – Zenwalker