Вернуть все поля в экземпляре производного класса - PullRequest
0 голосов
/ 29 июня 2011

Я ищу способ вернуть значение каждого поля в объекте предпочтительно в виде списка, но любой тип коллекции будет работать.После небольшого исследования я нашел этот код

FieldInfo[] fields = this.GetType().GetFields();

foreach(FieldInfo field in fields)
    // Perform actions

Это был бы правильный способ справиться с этим?Кроме того, если я помещу этот метод в базовый класс, если производный класс вызывает его, он вернет все поля в производном классе или базовом классе?(Или, проще говоря, нужно ли мне переопределять это для каждого производного класса?)

Это не проблема сделать это индивидуально для каждого класса, если это единственный способ, но я просто хочу немного сэкономитькода, так как у меня будет около 50+ производных классов.

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Вы используете GetType(), так что будут возвращены поля фактического типа объекта, а не типа, в котором вы объявляете метод. Вам не нужно переопределять

Однако ваш код в настоящее время получит только публичные поля - и я надеюсь, что у вас их нет:)

Вы, вероятно, хотите что-то вроде:

var fields = GetType().GetFields(BindingFlags.Instance |
                                 BindingFlags.NonPublic |
                                 BindingFlags.Public);
...

Я полагаю , что будет включать в себя унаследованные поля (так как он не указывает BindingFlags.DeclaredOnly), но вы должны проверить.

1 голос
/ 29 июня 2011

Да, это правильный способ справиться с этим.

this.GetType() покажет фактический тип объекта, поэтому, если это производный класс, он вернет тип производного класса и будет работать так, как ожидается.Итак: Нет, вам не нужно переопределять его в каждом дочернем классе.

Одна вещь: GetType() возвращает только открытые поля.Если вам также нужны другие поля, вам нужно использовать перегрузку GetType(BindingFlags) и указать соответствующие флаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...