Aquí está la estructura:Reflejando un campo privado de una clase base
MiClase: SuperClass2
SuperClass2: SuperClass1
superClass2 está en Product.Web y SuperClass1 está en el .NET System.Web ensamblaje
Estoy tratando de forzar un valor en un campo bool privado en SuperClass1. Pero no importa lo que intento, no puedo hacer que los campos vuelvan de la reflexión.
Estoy usando el siguiente código con diferentes combinaciones de BindingFlag pero nada ha funcionado hasta ahora. SuperClass1 es una clase abstracta.
((SuperClass1)this).GetType().GetFields(System.Reflection.BindingFlags.NonPublic);
Notas: Cuando uso GetProperties() regrese una buena lista grande, pero cuando especifico ningún BindingFlags no consigo nada a pesar de que existen propiedades coincidentes. ¿Cual es el trato?
Además, el campo no está marcado interno
obvisouly iba a usar GetField (nombre de la cadena, BindingFlags) pero no puede incluso conseguir GetFlags() para trabajar.
actualización: He intentado añadir BindingFlags.Instance como se sugiere, pero no funciona (como se espera de todos modos). Recupero 2 campos que provienen de la clase heredada de SuperClass1. Devuelve un valor nulo cuando se usa con GetField (nombre de la cadena, Banderas)
Aquí es el código de la clase base que estoy tratando de llegar al campo de
public abstract class BaseValidator : Label, IValidator
{
private bool propertiesChecked;
...
}
Lo siento por una pregunta estúpida, pero ¿por qué haces esto? :) – sll
Gran pregunta. Debido a Product.Web.SuperClass2, tengo que hacer esto como un trabajo para implementar el soporte para una característica que ya deberían admitir, pero no lo hacen. Básicamente, la API tiene un método virtual, pero SIEMPRE llama a la implementación base. Así que necesito cambiar el valor del campo para que no haga ciertas comprobaciones para que pueda ejecutar mi código. –
Por favor, no pregunte "¿por qué quieres hacer esto?" - No es útil o constructivo - hay un millón de razones válidas para hacer esto, y todas son diferentes. Obviamente, el código huele, pero el dogma no va a ayudar a los 900 mil de nosotros que serán arrojados aquí a través de Google. – BrainSlugs83