Holen Sie sich durch Reflexion Eigenschaften der Klasse, aber nicht von geerbten Klasse

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

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

Ich brauche nur Eigenschaft B, ohne Eigenschaft A aber

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

beide Eigenschaften zurückgeben: /

netmajor
quelle

Antworten:

155

Sie sollten BindingFlags.DeclaredOnly zu Ihren Flags hinzufügen , dh:

typeof(Child).GetProperties(System.Reflection.BindingFlags.Public
    | System.Reflection.BindingFlags.Instance
    | System.Reflection.BindingFlags.DeclaredOnly)
Francesco Baruchelli
quelle
2
Kann das anders herum sein. Parent.GetProperties () und erhalten alle Eigenschaften von Eltern und Kind, wenn das bestimmte Objekt vom Kind geerbt wird
Maiko Kingma
10

Versuchen Sie es mit dem DeclaredOnly-Bindungsflag. Es sollte die zurückgegebenen Eigenschaften nur auf diejenigen beschränken, die für die Klasse deklariert sind, an der Sie interessiert sind. Und hier ist ein Codebeispiel:

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

Hinzufügen BindingFlags.DeclaredOnly

Tigran
quelle
4

Von Type.cs : Verwenden Sie in diesem Fall 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;
eran otzap
quelle
1
Interessant, ich werde diesen Ansatz verwenden und meine eigenen const BindingFlags definieren. +1 für den Blick in den Quellcode.
C. Tewalt