Partager via


Vue d'ensemble de la réflexion

Le chargeur du Common Language Runtime gère les domaines d'application qui constituent des limites définies autour des objets qui ont la même portée d'application. Cette gestion inclut le chargement de chaque assembly dans le domaine d'application approprié et le contrôle de la disposition en mémoire de la hiérarchie de types dans chaque assembly.

Les assemblys contiennent des modules, les modules contiennent des types, et les types contiennent des membres. La réflexion fournit des objets qui encapsulent les assemblys, les modules et les types. Vous pouvez utiliser la réflexion pour créer dynamiquement une instance d'un type, lier le type à un objet existant ou l'obtenir à partir d'un objet existant. Vous pouvez ensuite appeler les méthodes de ce type ou accéder à ses champs et propriétés. Les principaux usages de la réflexion sont les suivants :

  • Utilisez Assembly pour définir et charger des assemblys, charger les modules répertoriés dans le manifeste d'assembly, et localiser un type à partir de l'assembly pour en créer une instance.

  • Utilisez Module pour découvrir certaines informations, par exemple l'assembly qui contient le module, et les classes présentes dans ce module. Vous pouvez également obtenir toutes les méthodes globales ou d'autres méthodes non globales spécifiques, définies sur le module.

  • Utilisez ConstructorInfo pour découvrir les informations telles que le nom, les paramètres, les modificateurs d'accès (par exemple public ou private) et les détails d'implémentation (par exemple abstract ou virtual) d'un constructeur. Utilisez la méthode GetConstructors ou GetConstructor de Type pour appeler un constructeur spécifique.

  • Utilisez MethodInfo pour découvrir les informations telles que le nom, le type de retour, les paramètres, les modificateurs d'accès (par exemple public ou private) et les détails d'implémentation (par exemple abstract ou virtual) d'une méthode. Utilisez la méthode GetMethods ou GetMethod de Type pour appeler une méthode spécifique.

  • Utilisez FieldInfo pour découvrir les informations telles que le nom, les modificateurs d'accès (par exemple public ou private) et les détails d'implémentation (par exemple static) d'un champ, ainsi que pour obtenir ou définir les valeurs des champs.

  • Utilisez EventInfo pour découvrir les informations telles que le nom, le type de données du gestionnaire d'événements, les attributs personnalisés, le type de déclaration et le type réfléchi d'un événement, ainsi que pour ajouter ou supprimer des gestionnaires d'événements.

  • Utilisez PropertyInfo pour découvrir les informations telles que le nom, le type de données, le type de déclaration, le type réfléchi et l'état (lecture seule ou écriture) d'une propriété, ainsi que pour obtenir ou définir des valeurs de propriétés.

  • Utilisez ParameterInfo pour découvrir les informations telles que le nom, le type de données, la définition (paramètre d'entrée ou de sortie), ainsi que la position du paramètre dans une signature de méthode.

  • Utilisez CustomAttributeData pour découvrir les informations relatives aux attributs personnalisés lorsque vous travaillez dans le contexte de réflexion seule d'un domaine d'application. CustomAttributeData vous permet d'examiner les attributs sans leur créer d'instances.

Les classes de l'espace de noms System.Reflection.Emit offrent une forme spécifique de réflexion qui vous permet de générer les types au moment de l'exécution.

Les réflexions peuvent également servir à créer des applications appelées explorateurs de types, qui permettent aux utilisateurs de sélectionner des types et d'afficher les informations associées.

D'autres utilisations sont encore possibles pour la réflexion. Les compilateurs de langages tels que JScript utilisent la réflexion pour construire des tables de symboles. Les classes de l'espace de noms System.Runtime.Serialization utilisent la réflexion pour accéder aux données et déterminer les champs à rendre persistants. Les classes de l'espace de noms System.Runtime.Remoting utilisent indirectement la réflexion via la sérialisation.

Voir aussi

Référence

Reflection Namespace
System.Reflection.Emit

Autres ressources

Réflexion
Émission d'assemblys et de méthodes dynamiques