2009-08-18 12 views
5

Après avoir réussi à obtenir une liste de types spécifiques d'un assemblage en utilisant la réflexion, je veux maintenant obtenir les propriétés publiques de chacun d'entre eux.Lorsque vous utilisez la réflexion pour obtenir des propriétés, comment puis-je limiter ma recherche à la seule sous-classe qui m'intéresse?

Chacun de ces types dérive d'au moins une classe de base.

Je remarque que lorsque j'obtiens des propriétés sur un type, j'obtiens aussi des propriétés des classes de base.

J'ai besoin d'un moyen de filtrer les propriétés de classe de base et de ne récupérer que les propriétés du type sur lequel j'appelle get properties. Je pense que ce serait similaire à la façon dont j'obtiens seulement des sous-classes d'un type de base, excluant le type de base, d'un type de base donné.

Assembly.GetAssembly(baseType).GetTypes().Where(type => type.IsSubclassOf(baseType)).ToList() 

Répondre

11

Utilisez BindingFlags.DeclaredOnly dans votre appel à Type.GetProperties:

var properties = Type.GetProperties(BindingFlags.DeclaredOnly | 
            BindingFlags.Public | 
            BindingFlags.Instance); 
+0

@ towps- voir ici pour en savoir plus sur: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx – RichardOD

+0

@Richard: va ajouter un lien ... –

+0

Merci les gens! Je ne savais pas pourquoi attacher le drapeau DeclaredOnly ne m'apportait rien. Vous semblez avoir besoin de public et d'instance? DeclareOnly et Public ne m'ont toujours rien trouvé. – topwik

2

utiliser le drapeau de liaison BindingFlags.DeclaredOnly dans la méthode GetProperties