Je suis un novice absolu à la réflexion en C#. Je veux utiliser la réflexion pour accéder à tous les champs privés d'une classe, y compris ceux qui sont hérités.C#: Accès aux membres d'instance privée hérités par réflexion
J'ai réussi à accéder à tous les champs privés à l'exclusion de ceux qui sont hérités, ainsi que de tous les champs hérités publics et protégés. Cependant, je n'ai pas pu accéder aux champs privés hérités. L'exemple suivant illustre:
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();
}
}
Ceci ne parvient pas à trouver le champ B.a.
Est-il même possible d'accomplir cela? La solution évidente serait de convertir les champs hérités privés en champs protégés. Ceci, cependant, est hors de mon contrôle pour le moment.
Au lieu de la clause "if" pour ignorer les champs hérités, vous pouvez simplement spécifier BindingFlags.DeclaredOnly. – Timwi
sans utiliser BaseType sur un type, pouvons-nous toujours accéder au membre privé de la classe de base. Non, cela ne résout aucun problème réel pour moi, mais je suis simplement curieux car en utilisant la propriété BaseType de la classe Type je suis convaincu que (en l'écrivant) j'accède aux membres de la classe de base Childs, donc il n'y a pas moyen d'utiliser Propriété BaseType pour atteindre la même chose? – Zenwalker