Je ne connais pas une bonne ressource complète. Dans mon expérience, la meilleure façon d'apprendre est de se retrouver dans une situation qui ne peut être résolue sans elle (du moins pas facilement). Donc, si vous connaissez les situations de base où les attributs de réflexion facilitent les choses, vous saurez quand vous devez commencer à les apprendre.
Réflexion: approprié lorsque vous ne pouvez pas faire ce dont vous avez besoin sans lui.
Je sais que ça paraît un peu sarcastique, mais il est en fait vrai - si vous avez besoin d'écrire du code, mais il est juste aucun moyen de comprendre les types des objets que vous traitez, la réflexion est appropriée . Il est également approprié lorsque vous avez besoin de vous faufiler et d'utiliser des membres privés/protégés/internes d'un objet que vous ne contrôlez pas.
Attributs: approprié lorsque vous devez ajouter des informations supplémentaires sur un type.
Exemple: J'ai un tas de classes IConverter
. Chacun correspond à un domaine spécifique de notre système de gestion de contenu. Comment puis-je décorer cette classe avec des informations supplémentaires qui décrivent le champ pour lequel elle est utilisée?
- Je pourrais créer une interface différente pour chaque convertisseur, même si tous font la même chose, mais cela semble être une mauvaise idée.
- Je pourrais mettre une propriété en lecture seule qui retourne une chaîne codée en dur au nom du champ sur chaque classe, mais alors je devrais créer une instance de chacun pour vérifier la valeur de la propriété.
Ce serait bien si je pouvais juste mettre une sorte d'information supplémentaire sur la classe elle-même qui dit à quel champ il est destiné. Ensuite, je peux vérifier tous mes types et trouver celui que je veux, et juste instancier celui-là. Attributs me laisser faire:
[HandlesField("FieldName")]
public class FooFieldConverter : IConverter
Merci pour cela. –