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


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.