Uzyskaj przez właściwości odbicia klasy, ale nie z klasy dziedziczonej


80
class Parent {
   public string A { get; set; }
}

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

Potrzebuję tylko właściwości B, bez właściwości A, ale

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

zwraca obie właściwości: /

Odpowiedzi:


155

Powinieneś dodać BindingFlags.DeclaredOnly do swoich flag, tj .:

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

2
Czy to może być na odwrót. Parent.GetProperties () i pobierz wszystkie właściwości od rodzica i dziecka, jeśli określony obiekt jest dziedziczony przez dziecko
Maiko Kingma

10

Spróbuj użyć flagi powiązania DeclaredOnly. Powinien ograniczyć zwracane właściwości tylko do tych zadeklarowanych w klasie, która Cię interesuje. A oto przykładowy kod:

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


4

From Type.cs : W tym przypadku użyj 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
Co ciekawe, użyję tego podejścia i zdefiniuję własną stałą BindingFlags. +1 za wgląd do kodu źródłowego.
C. Tewalt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.