La raison pour laquelle les gens hésitent à utiliser la réflexion inutilement n'est pas la performance: oui, il y a un surcoût à utiliser la réflexion, mais souvent, résoudre le problème sans cela nécessite une approche différente avec une complexité comparable, et même si ce n'est pas le cas, le surcoût est rarement significatif (en particulier pour le développement au niveau de l'application).
À l'aide de la réflexion, certaines hypothèses importantes que l'on peut normalement émettre à propos du code source sont rompues et les outils tels que «Rechercher toutes les références» cessent de fonctionner de manière fiable. La réflexion supprime également la plupart de la sécurité de type que le compilateur applique en C #, par exemple, et la plupart des erreurs de programmation qu'un système de type intercepterait et traduirait normalement en erreurs de compilation, deviennent maintenant des erreurs d'exécution au mieux ou des bogues très obscurs au pire.
Alors pourquoi les gens utilisent-ils la réflexion? Autrement dit, car malgré les problèmes décrits ci-dessus, c'est un outil très précieux. Avec la réflexion, certains des avantages de la programmation dynamique peuvent être obtenus dans un langage statique et strictement typé comme C #, et les langages de programmation dynamiques ont récemment montré leurs mérites, en particulier dans le domaine de la programmation Web - PHP, Javascript et Python bien en évidence. , tous utilisent la frappe dynamique et se sont révélés être de bons ajustements pour la programmation Web. Mais comme le langage est toujours C #, vous pouvez choisir de conserver la plupart de votre application dans un idiome OOP strictement typé et d'écrire la petite partie où le comportement dynamique fait vraiment une différence avec la réflexion.
Un exemple typique est lorsque vous devez exposer des méthodes en tant qu'appels de service Web (en utilisant un protocole non encore intégré à .NET). L'approche OOP strictement typée fonctionne, mais elle est trop restrictive et maladroite. Mais si vous utilisez la réflexion pour mapper les appels aux méthodes et les paires clé / valeur aux arguments, vous pouvez écrire une fois la plomberie d'un tel service Web, puis l'utiliser sur n'importe quelle classe de votre choix.