¿Encontrar un campo privado con Reflection?
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?
Aceptado
Uso BindingFlags.NonPublic
y BindingFlags.Instance
banderas
FieldInfo[] fields = myType.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
Puedes hacerlo como con una propiedad:
FieldInfo fi = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fi.GetCustomAttribute(typeof(SomeAttribute)) != null)
...
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.