82 votes

Obtenir par réflexion les propriétés de la classe, mais pas de la classe héritée

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

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

J'ai besoin d'obtenir uniquement la propriété B, sans la propriété A mais

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

renvoie les deux propriétés :/

161voto

Francesco Baruchelli Points 4042

Vous devez ajouter BindingFlags.DeclaredOnly à vos indicateurs, c'est-à-dire :

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

11voto

ScorpiAS Points 816

Essayez d'utiliser l'indicateur de liaison DeclaredOnly. Cela devrait limiter les propriétés renvoyées à celles déclarées sur la classe qui vous intéresse. Et voici un exemple de code :

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

4voto

Tigran Points 41381

Ajouter BindingFlags.DeclaredOnly

4voto

eran otzap Points 3397

De Type.cs : Dans ce cas, utilisez le 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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X