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.