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: /

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)

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


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;

1
Interessant, ich werde diesen Ansatz verwenden und meine eigenen const BindingFlags definieren. +1 für den Blick in den Quellcode.
C. Tewalt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.