Vue d'ensemble de la réflexion
Mise à jour : novembre 2007
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 cet assembly pour en créer une instance.
Utilisez Module pour découvrir certaines informations comme 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 des informations, telles que le nom, les paramètres, les modificateurs d'accès (comme public ou private) et les détails d'implémentation (comme abstract ou virtual) d'un constructeur. Utilisez la méthode GetConstructors ou GetConstructor d'un Type pour appeler un constructeur spécifique.
Utilisez MethodInfo pour découvrir des informations, telles que le nom, le type de retour, les paramètres, les modificateurs d'accès (comme public ou private) et les détails d'implémentation (comme abstract ou virtual) d'une méthode. Utilisez la méthode GetMethods ou GetMethod d'un Type pour appeler une méthode spécifique.
Utilisez FieldInfo pour découvrir des informations telles que le nom, les modificateurs d'accès (comme public ou private) et les détails d'implémentation (comme static) d'un champ, ainsi que pour obtenir ou définir des valeurs de champ.
Utilisez EventInfo pour découvrir des informations telles que le nom, le type de données du gestionnaire d'événements, les attributs personnalisés, le type déclarant 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 des informations telles que le nom, le type de données, le type déclarant, 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é.
Utilisez ParameterInfo pour découvrir des informations telles que le nom d'un paramètre, 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 fournissent un formulaire spécialisé de réflexion qui vous permet de générer des 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.