¿Encontrar un campo privado con Reflection?

Resuelto David Basarab asked hace 15 años • 11 respuestas

dada esta clase

class Foo
{
    // Want to find _bar with reflection
    [SomeAttribute]
    private string _bar;

    public string BigBar
    {
        get { return this._bar; }
    }
}

Quiero encontrar el elemento privado _bar que marcaré con un atributo. ¿Es eso posible?

He hecho esto con propiedades donde busqué un atributo, pero nunca un campo de miembro privado.

¿Cuáles son los indicadores vinculantes que necesito configurar para obtener los campos privados?

David Basarab avatar Sep 19 '08 02:09 David Basarab
Aceptado

Uso BindingFlags.NonPublicy BindingFlags.Instancebanderas

FieldInfo[] fields = myType.GetFields(
                         BindingFlags.NonPublic | 
                         BindingFlags.Instance);
Bob King avatar Sep 18 '2008 19:09 Bob King

Puedes hacerlo como con una propiedad:

FieldInfo fi = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fi.GetCustomAttribute(typeof(SomeAttribute)) != null)
    ...
Abe Heidebrecht avatar Sep 18 '2008 19:09 Abe Heidebrecht

Obtenga el valor de la variable privada usando Reflection:

var _barVariable = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectForFooClass);

Establezca el valor de la variable privada usando Reflection:

typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectForFoocClass, "newValue");

Donde objectForFooClass es una instancia no nula para el tipo de clase Foo.

Suriya avatar Dec 09 '2011 08:12 Suriya