2010-12-03 21 views
1

J'utilise la réflexion sur l'assemblage d'une API publique avec laquelle je travaille avec System.CodeDOM pour générer du code qui va extraire des informations via l'API.get_PropertyName()/set_PropertyName() vs PropertyName?

Dans le cadre de mon code généré automatiquement, je référence les valeurs d'un certain nombre de propriétés de types dans l'assembly API. Cependant, je continue à me retrouver avec des références à des propriétés qui n'existent pas dans mon code généré. J'ai utilisé Type.GetProperties() qui, d'après ce que je comprends, ne devrait retourner que des propriétés publiques.

j'ai regardé davantage et a constaté que quand j'avais une propriété manquante, disons appelé SampleProperty il y avait lieu deux méthodes dans la classe appelée get_SampleProperty et set_SampleProperty mais pas de propriété SampleProperty réelle.

Que se passe-t-il ici? Pourquoi intellisense traite ces méthodes comme des méthodes distinctes, mais lorsqu'elles sont renvoyées par réflexion, elles apparaissent comme une propriété?

+0

Je pense que j'aurais besoin d'un [SSCCE] (http://pscode.org/sscce.html) pour pouvoir aider. –

Répondre

5

J'ai utilisé PropertyInfo.GetProperties() qui, d'après ce que je comprends, ne devrait renvoyer que des propriétés publiques.

Cela peut être votre première connexion, la classe PropertyInfo n'a pas de méthode GetProperties. La classe Type fait. Votre question indique autrement que vous utilisez réellement Type.GetMethods(). Oui, cela renvoie les méthodes d'accesseur de propriété get_Blah et set_Blah pour une propriété. Sous le capot, les propriétés sont réellement implémentées en tant que méthodes.

Utilisez Type.GetProperties() pour refléter les propriétés.

+0

+1 Écrivait tout à fait la même chose lorsque votre réponse est venue. =) –

+0

Ouais désolé c'était une faute de frappe J'utilisais Type.GetProperties() –