2009-05-25 9 views
9

Doublons possibles:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?À quoi sert Reflection dans .NET?

Quelle est la nécessité d'une réflexion dans .NET? Quelles sont les situations où cela est utile?

+0

Il est pratique lorsque rien d'autre ne fonctionne. Tout comme javascript dans le monde Web. :) –

+2

double: http://stackoverflow.com/questions/429962/when-do-you-use-reflection-patterns-anti-patterns ... ... ... ... également : http://stackoverflow.com/questions/864332/what-exactly-is-reflection-and-when-is-it-a-good-approach – Shog9

Répondre

10

Imaginons que vous écrivez une routine de sérialisation de base qui sérialisera tout objet au format XML. Comment pourriez-vous le rendre assez générique, pour qu'il puisse fonctionner pour n'importe quel objet? Si vous avez une classe où vous connaissez toutes les propriétés, alors vous pouvez facilement écrire une fonction "ToXml()", où vous écrivez manuellement toutes les propriétés au format XML. Et si vous voulez étendre cela à n'importe quel objet? Dans ce cas, vous devez réfléchir sur les propriétés lors de l'exécution et les écrire dans le fichier XML.

Il y a beaucoup d'autres utilisations, c'est le premier qui me vient à l'esprit.

3

Je pense que le Wikipedia article on reflection est assez bonne:

Dans l'informatique, la réflexion est le processus par lequel un programme informatique peut observer et modifier sa propre structure et le comportement. Le paradigme de programmation conduit par la réflexion est appelé la programmation réfléchissante . C'est un type particulier de métaprogrammation.

Dans de nombreuses architectures informatiques, instructions du programme sont stockées sous forme de données - d'où la distinction entre l'instruction et les données est simplement une question de la façon dont l'information est traitée par l'ordinateur et langage de programmation. Normalement, 'instructions' sont 'exécutées' et 'données' est 'traité'; Cependant, dans certaines langues, les programmes peuvent également traiter les instructions comme des données et par conséquent effectuer des modifications réfléchissantes . La réflexion est plus couramment utilisé dans les langages de programmation de la machine virtuelle de haut niveau comme langues Smalltalk et de script, et moins couramment utilisé dans manifestement tapé et/ou statiquement programmation typée langages tels que Java et C.

La réflexion vous permet d'obtenir des informations sur le type d'un objet au moment de l'exécution. Cela peut être utile dans de nombreuses situations, y compris (mais limitées à) la sérialisation et les mappages objet-relationnels.

+0

Mais pas limité à? – jedmao

1

La réflexion est utilisé lorsque vous ne savez pas au moment de la compilation que le temps est votre objet ou l'action à faire ou sur ce bien ...

Vous pouvez utiliser la réflexion pour trouver tous les objets de type X dans un assembly donné, ou invoquer une méthode par son nom (récupéré depuis un db, ou un fichier de configuration ...), même chose pour définir une propriété .... des choses comme ça (c'est le cas où nous l'avons utilisé)

4

Il existe de nombreuses utilisations pour la réflexion. Le .NET Framework utilise pour serialization et data binding, il peut également être utilisé pour créer des outils qui examinent votre code comme réflecteur, FxCop et NUnit ainsi que des cadres de base de données ORM. Il a une grande variété d'utilisations à l'exécution de la journalisation des choses spécifiques sur un objet à Dependency Injection Frameworks. Il peut également être utilisé pour exécuter dynamiquement des méthodes ou définir des propriétés lors de l'exécution comme cela est fait avec des attributs personnalisés. Il peut également être utilisé dans des programmes de niveau supérieur tels que metaprogramming et le code auto-modifiable.

3

Il est utilisé pour métaprogrammation, ce qui est quand vous codez sur le code lui-même plutôt que les problèmes commerciaux habituels

2

Il peut aussi être très utile pour tester votre application, par exemple tests unitaires ou autres types de cadres de test. En utilisant la réflexion, vous pouvez par exemple créer un fichier XML (ou un autre fichier de données d'entrée dans un format approprié) et demander à votre programme de l'analyser et d'appeler les méthodes qui sont définies dans le fichier. C'est ainsi que fonctionne le Fitnesse.

Questions connexes