Pourquoi l'usage de la réflexion dans l' .NET a recommandé?
Est-il vraiment une bonne pratique pour l'utiliser?
Quelles sont les situations possibles dans un projet qui a besoin de la réflexion?
Vous devez vous connecter pour publier un commentaire.
La principale valeur de la Réflexion, c'est qu'il peut être utilisé pour inspecter les assemblées, les types et les membres. C'est un outil très puissant pour déterminer le contenu d'un inconnu de l'assemblée ou de l'objet et peut être utilisé dans une grande variété de cas.
Adversaires de la Réflexion de citer qu'il est lent, ce qui est vrai quand par rapport à la statique de l'exécution de code--cependant, la Réflexion est utilisé tout au long de l' .NET framework, et à condition qu'il n'est pas abusé, il peut être un outil très puissant dans la boîte à outils.
Certaines applications utiles:
Déterminer les dépendances d'une assemblée
Types d'emplacement qui sont conformes à une interface, dériver à partir d'une base /classe abstraite, et la recherche de membres par des attributs
(Qui puent) test - Si vous dépendez d'une classe qui est impossible à vérifier (c'est à dire qu'il n'est pas de vous permettre de créer facilement un faux), vous pouvez utiliser la Réflexion pour injecter de fausses valeurs au sein de la classe--c'est pas joli, et n'est pas recommandé, mais il peut être un outil pratique en cas de pépin.
De débogage - dumping, une liste des chargés d'assemblages, de leurs références, des méthodes, etc...
Il existe de nombreuses utilisations pour la réflexion:
Cependant, l'un de mes préférés utilise de réflexion pour trouver les propriétés qui ont été marqués avec des attributs.
Par exemple, j'ai écrit des attributs qui marque les propriétés dans mes classes devraient être indexés à l'aide de Lucene. Au moment de l'exécution, je peux regarder n'importe quelle classe, et de déterminer quels sont les champs d'obtenir indexées par juste l'interrogation de la classe pour "marqué" propriétés.
Réflexion est juste une façon d'enquêter sur les objets au cours de l'exécution. Vous ne devriez pas l'utiliser si vous n'avez pas besoin de le faire.
Réflexion permet à une application de recueillir des informations sur lui-même et aussi à manipuler sur lui-même. Il peut être utilisé pour trouver tous les types dans un assemblage et/ou invoquer dynamiquement des méthodes dans une assemblée.
Système.Réflexion: espace de nom renferme les classes et les interfaces qui fournissent un affichage géré de chargé types, des méthodes et des champs, avec la possibilité de créer dynamiquement et invoquer types; ce processus est connu comme Réflexion .NET framework.
Système.Type: classe est la classe principale de l' .NET Réflexion fonctionnalités et est le principal moyen d'accéder aux métadonnées. Le Système.Type de classe est une classe abstraite et représente un type dans le Système de Type Commun (CLS).
Il représente des déclarations de types: les types de classes, types d'interface, tableau des types, des types de valeur, l'énumération des types, des paramètres de type générique des définitions de type, et ouvert ou fermé construit types génériques.
Par exemple:
Vous pouvez utiliser la réflexion pour mettre en place un système de plugins par exemple. Vous recherchez simplement toutes les DLL dans un dossier et par la réflexion de vérifier si elles mettent en œuvre un certain interface du plugin. C'est la principale raison pour laquelle j'ai utilisé la réflexion, mais je l'ai aussi utilisé pour mettre en œuvre un générique home-brew sérialisation d'un objet, où le rendement n'était pas la plus grande préoccupation.
Comme mentionné ci-dessus, les performances vont en prendre un coup.
Un autre grand avantage est que vous pouvez charger dynamiquement des assemblées, effectuer à la propriété de la manipulation, même si vous n'avez pas la portée de voir ce qu'il faut changer, etc.
Les raisons d'utiliser ce sont de nombreuses. Voici une introduction si vous avez besoin d'.
Réflexion est couramment utilisé dans les Cio des conteneurs. Disons que vous souhaitez enregistrer chaque classe concrète les extrémités avec le mot "Contrôleur". La réflexion fait qu'un morceau de gâteau.
J'ai aussi utilisé de la réflexion afin de manipuler les champs privés lorsque les tests unitaires classes.
De la très utile XmlSerialization classe s'appuie sur la réflexion. Vous n'avez pas à traiter avec la réflexion-vous à utiliser la sérialisation, la sérialisation des classes de susciter la réflexion d'eux-mêmes. Mais il permet de baliser votre code avec des Attributs qui guide la façon dont les objets sont sérialisés. Les classes de sérialisation utiliser la réflexion lors de l'exécution de lire ces attributs. En fin de compte, le processus semble presque magique, ne nécessitant que très peu de lignes de codage explicite dans une application; c'est la réflexion qui fait que la commodité possible.
XmlSerialization lui-même est génial, non seulement parce que c'est un moyen très pratique pour créer des fichiers de données à partir d'une application, c'est aussi un moyen facile de générer des documents exploitables d'un programme interne du modèle de données à des fins de débogage.
À venir à partir de C++ et avoir besoin d'un peu simple hiérarchies de classe, je peux dire que le
is
mot-clé est inestimable!P. S. N'est pas la réflexion un peu cher, btw?