Как получить частные поля класса и его родительский класс путем отражения?
У меня есть класс B и его родительский класс A, как в пространстве имен Domain.
- Класс A имеет частное поле a;
- Класс B имеет частное поле b;
Тогда у меня есть Reflection Util в пространстве имен Reflect.
Если я использую эту строку
instanceOfB.GetType().GetFields(BindingFlags.NonPublic
| BindingFlags.Public | BindingFlags.Instance );
чтобы найти все поля (a и b), я получаю только b. Но когда я делаю a
protected или public, я нахожу их тоже.
Что мне нужно сделать, чтобы найти частные поля базового класса?
Ответы
Ответ 1
Это документальное поведение:
Укажите BindingFlags.NonPublic, чтобы включить в поиск непубличные поля (то есть частные, внутренние и защищенные поля). Возвращаются только защищенные и внутренние поля базовых классов; частные поля в базовых классах не возвращаются.
Если вам нужно получить частные поля, вам нужно задать базовый тип. (Используйте Type.BaseType
, чтобы найти базовый тип, и вызовите GetFields
на этом.)
Ответ 2
instanceOfB.GetType().BaseType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance );
Ответ 3
public class A
{
private int aa;
}
public class B
{
private int bb;
}
System.Reflection.FieldInfo[] fields = (new B()).GetType().GetFields(BindingFlags.NonPublic| BindingFlags.Public | BindingFlags.Instance);