Получить по отражению свойства класса, но не из унаследованного класса - PullRequest
67 голосов
/ 29 сентября 2011
class Parent {
   public string A { get; set; }
}

class Child : Parent {
   public string B { get; set; }
}

Мне нужно получить только свойство B, без свойства A но

Child.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)

вернуть оба свойства: /

Ответы [ 4 ]

133 голосов
/ 29 сентября 2011

Вы должны добавить BindingFlags.DeclaredOnly к вашим флагам, т.е.:

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)
7 голосов
/ 29 сентября 2011

Попробуйте использовать флаг привязки DeclaredOnly.Он должен ограничивать возвращаемые свойства только теми, которые объявлены в интересующем вас классе. А вот пример кода:

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
4 голосов
/ 29 сентября 2011

Добавить BindingFlags.DeclaredOnly

3 голосов
/ 25 февраля 2015

С Type.cs : в этом случае использовать DeclaredOnlyLookup

  private const BindingFlags DefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
  internal const BindingFlags DeclaredOnlyLookup = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...