Получить путем отражения свойства класса, но не из унаследованного класса


80
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)

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

Ответы:


155

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

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

2
Может это наоборот. Parent.GetProperties () и получить все свойства от родителя и потомка, если конкретный объект унаследован дочерним
Майко Кингма

10

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

PropertyInfo[] properties = typeof(Child).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);


4

Из 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;

1
Интересно, что я использую этот подход и определю свою собственную const BindingFlags. +1 за просмотр исходного кода.
C. Tewalt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.