Réflexion dans .NETReflection in .NET

Les classes de l’espace de noms System.Reflection avec System.Type vous permettent d’obtenir des informations sur les assemblys chargés et sur les types définis dans ceux-ci, comme les types des classes, desinterfaces et des valeurs.The classes in the System.Reflection namespace, together with System.Type, enable you to obtain information about loaded assemblies and the types defined within them, such as classes, interfaces, and value types. Vous pouvez également utiliser la réflexion pour créer des instances de types au moment de l'exécution, et pour les appeler et y accéder.You can also use reflection to create type instances at run time, and to invoke and access them. Pour obtenir des informations sur des aspects spécifiques de la réflexion, consultez Rubriques connexes à la fin de cette vue d’ensemble.For topics about specific aspects of reflection, see Related Topics at the end of this overview.

Le chargeur du common language runtime gère les domaines d’application. Ceux-ci constituent des limites définies autour des objets qui ont la même portée d’application.The common language runtime loader manages application domains, which constitute defined boundaries around objects that have the same application scope. Cette gestion comprend 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 des types dans chaque assembly.This management includes loading each assembly into the appropriate application domain and controlling the memory layout of the type hierarchy within each assembly.

Les assemblys contiennent des modules, les modules contiennent des types, et les types contiennent des membres.Assemblies contain modules, modules contain types, and types contain members. La réflexion fournit des objets qui encapsulent les assemblys, les modules et les types.Reflection provides objects that encapsulate assemblies, modules, and types. Vous pouvez utiliser la réflexion pour créer dynamiquement une instance d'un type, pour lier le type à un objet existant ou pour obtenir le type d'un objet existant.You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object. Vous pouvez ensuite appeler les méthodes du type ou accéder à ses champs et à ses propriétés.You can then invoke the type's methods or access its fields and properties. Les utilisations courantes de la réflexion sont les suivantes :Typical uses of reflection include the following:

  • Utilisez Assembly pour définir et charger des assemblys, charger les modules répertoriés dans le manifeste d'assembly, et pour localiser un type de cet assembly et créer une instance de celui-ci.Use Assembly to define and load assemblies, load modules that are listed in the assembly manifest, and locate a type from this assembly and create an instance of it.

  • Utilisez Module pour découvrir des informations comme l'assembly qui contient le module et les classes de ce module.Use Module to discover information such as the assembly that contains the module and the classes in the module. Vous pouvez également obtenir toutes les méthodes globales ou d'autres méthodes spécifiques non globales définies sur le module.You can also get all global methods or other specific, nonglobal methods defined on the module.

  • Utilisez ConstructorInfo pour découvrir des informations comme 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.Use ConstructorInfo to discover information such as the name, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a constructor. Utilisez la méthode GetConstructors ou GetConstructor d'un type Type pour appeler un constructeur spécifique.Use the GetConstructors or GetConstructor method of a Type to invoke a specific constructor.

  • Utilisez MethodInfo pour découvrir des informations comme 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.Use MethodInfo to discover information such as the name, return type, parameters, access modifiers (such as public or private), and implementation details (such as abstract or virtual) of a method. Utilisez la méthode GetMethods ou GetMethod d'un type Type pour appeler une méthode spécifique.Use the GetMethods or GetMethod method of a Type to invoke a specific method.

  • Utilisez FieldInfo pour découvrir des informations comme le nom, les modificateurs d'accès (comme public ou private) et les détails d'implémentation (comme static) d'un champ, et pour obtenir ou définir les valeurs du champ.Use FieldInfo to discover information such as the name, access modifiers (such as public or private) and implementation details (such as static) of a field, and to get or set field values.

  • Utilisez EventInfo pour découvrir des informations comme 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, et pour ajouter ou supprimer des gestionnaires d'événements.Use EventInfo to discover information such as the name, event-handler data type, custom attributes, declaring type, and reflected type of an event, and to add or remove event handlers.

  • Utilisez PropertyInfo pour découvrir des informations comme le nom, le type de données, le type déclarant, le type réfléchi, et l'état en lecture seule ou en écriture d'une propriété, et pour obtenir ou définir les valeurs de la propriété.Use PropertyInfo to discover information such as the name, data type, declaring type, reflected type, and read-only or writable status of a property, and to get or set property values.

  • Utilisez ParameterInfo pour découvrir des informations comme le nom d'un paramètre, son type de données, si un paramètre est un paramètre d'entrée ou de sortie, et la position du paramètre dans la signature d'une méthode.Use ParameterInfo to discover information such as a parameter's name, data type, whether a parameter is an input or output parameter, and the position of the parameter in a method signature.

  • Utilisez CustomAttributeData pour découvrir des informations sur les attributs personnalisés quand vous travaillez dans le contexte de réflexion uniquement d'un domaine d'application.Use CustomAttributeData to discover information about custom attributes when you are working in the reflection-only context of an application domain. CustomAttributeData vous permet d'examiner des attributs sans créer des instances de ceux-ci.CustomAttributeData allows you to examine attributes without creating instances of them.

Les classes de l'espace de noms System.Reflection.Emit fournissent une forme de réflexion spécialisée qui vous permet de créer des types au moment de l'exécution.The classes of the System.Reflection.Emit namespace provide a specialized form of reflection that enables you to build types at run time.

La réflexion peut également être utilisée pour créer des applications appelées explorateurs de types, qui permettent aux utilisateurs de sélectionner des types et d'afficher les informations sur ces types.Reflection can also be used to create applications called type browsers, which enable users to select types and then view the information about those types.

Il existe d'autres utilisations de la réflexion.There are other uses for reflection. Les compilateurs de langages comme JScript utilisent la réflexion pour construire des tables de symboles.Compilers for languages such as JScript use reflection to construct symbol tables. Les classes de l'espace de noms System.Runtime.Serialization utilisent la réflexion pour accéder aux données et pour déterminer les champs à rendre persistants.The classes in the System.Runtime.Serialization namespace use reflection to access data and to determine which fields to persist. Les classes de l'espace de noms System.Runtime.Remoting utilisent la réflexion indirectement via la sérialisation.The classes in the System.Runtime.Remoting namespace use reflection indirectly through serialization.

Types au moment de l'exécution dans la réflexionRuntime Types in Reflection

La réflexion fournit des classes, comme Type et MethodInfo, pour représenter des types, des membres, des paramètres et d'autres entités de code.Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. Cependant, quand vous utilisez la réflexion, vous ne travaillez pas directement avec ces classes, dont la plupart sont abstraites (MustInherit en Visual Basic).However, when you use reflection, you don't work directly with these classes, most of which are abstract (MustInherit in Visual Basic). Au lieu de cela, vous utilisez des types fournis par le common language runtime (CLR).Instead, you work with types provided by the common language runtime (CLR).

Par exemple, quand vous utilisez l'opérateur C# typeof (GetType en Visual Basic) pour obtenir un objet Type, l'objet est réellement d'un type RuntimeType.For example, when you use the C# typeof operator (GetType in Visual Basic) to obtain a Type object, the object is really a RuntimeType. RuntimeType dérive de Type et fournit des implémentation de toutes les méthodes abstraites.RuntimeType derives from Type and provides implementations of all the abstract methods.

Ces classes d'exécution sont internal (Friend en Visual Basic).These runtime classes are internal (Friend in Visual Basic). Elles ne sont pas documentées distinctement de leurs classes de base, car leur comportement est décrit par la documentation de la classe de base.They are not documented separately from their base classes, because their behavior is described by the base class documentation.

TitreTitle DescriptionDescription
Affichage des informations de typeViewing Type Information Décrit la classe Type et fournit des exemples de code qui montrent comment utiliser Type avec plusieurs classes de réflexion pour obtenir des informations sur les constructeurs, les méthodes, les champs, les propriétés et les événements.Describes the Type class and provides code examples that illustrate how to use Type with several reflection classes to obtain information about constructors, methods, fields, properties, and events.
Réflexion et types génériquesReflection and Generic Types Explique comment la réflexion gère les paramètres de types et les arguments de types des types génériques et des méthodes génériques.Explains how reflection handles the type parameters and type arguments of generic types and generic methods.
Considérations sur la sécurité de la réflexionSecurity Considerations for Reflection Décrit les règles qui déterminent à quel degré la réflexion peut être utilisée pour découvrir des informations sur les types et accéder aux types.Describes the rules that determine to what degree reflection can be used to discover type information and access types.
Chargement et utilisation dynamiques des typesDynamically Loading and Using Types Décrit l’interface de liaison personnalisée de la réflexion qui prend en charge la liaison tardive.Describes the reflection custom-binding interface that supports late binding.
Guide pratique pour charger des assemblys dans le contexte de réflexion uniquementHow to: Load Assemblies into the Reflection-Only Context Décrit le contexte de chargement de réflexion seule.Describes the reflection-only load context. Montre comment charger un assembly, tester le contexte et examiner les attributs appliqués à un assembly dans le contexte de réflexion uniquement.Shows how to load an assembly, how to test the context, and how to examine attributes applied to an assembly in the reflection-only context.
Accès aux attributs personnalisésAccessing Custom Attributes Montre l'utilisation de la réflexion pour déterminer l'existence et les valeurs des attributs.Demonstrates using reflection to query attribute existence and values.
Spécification des noms de types completsSpecifying Fully Qualified Type Names Décrit le format des noms complets des types sous la forme Backus-Naur (BNF) et la syntaxe requise pour spécifier les caractères spéciaux, les noms d'assemblys, les pointeurs, les références et les tableaux.Describes the format of fully qualified type names in terms of the Backus-Naur form (BNF), and the syntax required for specifying special characters, assembly names, pointers, references, and arrays.
Guide pratique pour raccorder un délégué à l’aide de la réflexionHow to: Hook Up a Delegate Using Reflection Explique comment créer un délégué pour une méthode et raccorder le délégué à un événement.Explains how to create a delegate for a method and hook the delegate up to an event. Explique comment créer une méthode de gestion d'événements à l'exécution à l'aide de DynamicMethod.Explains how to create an event-handling method at run time using DynamicMethod.
Émission d’assemblys et de méthodes dynamiquesEmitting Dynamic Methods and Assemblies Explique comment générer des assemblys dynamiques et des méthodes dynamiques.Explains how to generate dynamic assemblies and dynamic methods.

ReferenceReference

System.Type

System.Reflection

System.Reflection.Emit