Отримати шляхом відображення властивості класу, але не з успадкованого класу


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.