Как получить частные поля класса и его родительского класса (классов) по отражению? - PullRequest
11 голосов
/ 06 мая 2011

У меня есть класс B и его родительский класс A, оба в пространстве имен Domain.

  • Класс A, имеет личное поле a;
  • Класс B, имеет личное полеb;

Тогда у меня есть Reflection Util в пространстве имен Reflect.Если я использую эту строку

instanceOfB.GetType().GetFields(BindingFlags.NonPublic 
         | BindingFlags.Public | BindingFlags.Instance );

, чтобы найти все поля (a & b), я получу только b.Но когда я делаю a защищенным или общедоступным, я нахожу их тоже.

Что мне нужно сделать, чтобы найти и частные поля базового класса?

Ответы [ 3 ]

13 голосов
/ 06 мая 2011

Это документированное поведение :

Укажите BindingFlags.NonPublic, чтобы включить в поиск непубличные поля (то есть частные, внутренние и защищенные поля).Возвращаются только защищенные и внутренние поля в базовых классах;закрытые поля в базовых классах не возвращаются.

Если вам нужно получить закрытые поля, вам нужно будет задать базовый тип.(Используйте Type.BaseType, чтобы найти базовый тип, и назовите GetFields для этого.)

1 голос
/ 06 мая 2011
instanceOfB.GetType().BaseType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance );
0 голосов
/ 06 мая 2011
 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...