Soy un novato absoluto en la reflexión en C#. Quiero usar la reflexión para acceder a todos los campos privados de una clase, incluidos los heredados.C#: Accediendo a miembros de instancias privadas heredadas a través de la Reflexión
He tenido éxito al acceder a todos los campos privados, excepto los heredados, así como a todos los campos públicos y protegidos heredados. Sin embargo, no he podido acceder a los campos privados y heredados. El siguiente ejemplo ilustra:
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();
}
}
Esto no puede encontrar el campo B.a.
¿Es posible incluso lograr esto? La solución obvia sería convertir los campos privados y heredados en campos protegidos. Esto, sin embargo, está fuera de mi control en este momento.
En lugar de la cláusula "if" para ignorar los campos heredados, puede especificar BindingFlags.DeclaredOnly. – Timwi
sin usar BaseType en un tipo, ¿podemos acceder al miembro privado de la clase Base? No, esto no soluciona ningún problema del mundo real, pero tengo curiosidad porque al utilizar la propiedad BaseType de la clase Type estoy convencido de que (mientras lo escribo) estoy accediendo a los miembros de la clase base de Childs, así que ¿hay alguna otra forma sin usar? Propiedad BaseType para lograr lo mismo? – Zenwalker