Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

TypeBuilder, classe

Définit et crée de nouvelles instances de classes au moment de l'exécution.

System.Object
  System.Reflection.MemberInfo
    System.Type
      System.Reflection.Emit.TypeBuilder

Espace de noms :  System.Reflection.Emit
Assembly :  mscorlib (dans mscorlib.dll)
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class TypeBuilder : Type, 
	_TypeBuilder

Le type TypeBuilder expose les membres suivants.

  Nom Description
Propriété publique Assembly Récupère l'assembly dynamique qui contient cette définition de type. (Substitue Type.Assembly.)
Propriété publique AssemblyQualifiedName Retourne le nom complet de ce type, qualifié par le nom complet de l'assembly. (Substitue Type.AssemblyQualifiedName.)
Propriété publique Attributes Obtient les attributs associés à Type. (Hérité de Type.)
Propriété publique BaseType Récupère le type de base de ce type. (Substitue Type.BaseType.)
Propriété publique ContainsGenericParameters Obtient une valeur indiquant si l'objet Type en cours a des paramètres de type qui n'ont pas été remplacés par les types spécifiques. (Hérité de Type.)
Propriété publique DeclaringMethod Obtient la méthode qui a déclaré le paramètre de type générique actuel. (Substitue Type.DeclaringMethod.)
Propriété publique DeclaringType Retourne le type qui a déclaré ce type. (Substitue Type.DeclaringType.)
Propriété publique FullName Récupère le chemin d'accès complet de ce type. (Substitue Type.FullName.)
Propriété publique GenericParameterAttributes Obtient une valeur indiquant la covariance et les contraintes spéciales du paramètre de type générique actuel. (Substitue Type.GenericParameterAttributes.)
Propriété publique GenericParameterPosition Obtient la position d'un paramètre de type dans la liste des paramètres de type du type générique qui a déclaré le paramètre. (Substitue Type.GenericParameterPosition.)
Propriété publique GUID Récupère le GUID de ce type. (Substitue Type.GUID.)
Propriété publique HasElementType Obtient une valeur indiquant si le Type en cours englobe ou se réfère à un autre type, c'est-à-dire si le Type en cours est un tableau ou un pointeur ou encore s'il est passé par référence. (Hérité de Type.)
Propriété publique IsAbstract Obtient une valeur indiquant si le Type est abstrait et doit être substitué. (Hérité de Type.)
Propriété publique IsAnsiClass Obtient une valeur indiquant si l'attribut de format de chaîne AnsiClass est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsArray Obtient une valeur indiquant si Type est un tableau. (Hérité de Type.)
Propriété publique IsAutoClass Obtient une valeur indiquant si l'attribut de format de chaîne AutoClass est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsAutoLayout Obtient une valeur indiquant si l'attribut de présentation de classe AutoLayout est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsByRef Obtient une valeur indiquant si Type est passé par référence. (Hérité de Type.)
Propriété publique IsClass Obtient une valeur indiquant si le Type est une classe, c'est-à-dire ni un type valeur ni une interface. (Hérité de Type.)
Propriété publique IsCOMObject Obtient une valeur indiquant si Type est un objet COM. (Hérité de Type.)
Propriété publique IsContextful Obtient une valeur indiquant si Type peut être hébergé dans un contexte. (Hérité de Type.)
Propriété publique IsEnum Obtient une valeur indiquant si le Type actuel représente une énumération. (Hérité de Type.)
Propriété publique IsExplicitLayout Obtient une valeur indiquant si l'attribut de présentation de classe ExplicitLayout est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsGenericParameter Obtient une valeur indiquant si le type actuel est un paramètre de type générique. (Substitue Type.IsGenericParameter.)
Propriété publique IsGenericType Obtient une valeur indiquant si le type actuel est un type générique. (Substitue Type.IsGenericType.)
Propriété publique IsGenericTypeDefinition Obtient une valeur qui indique si le TypeBuilder actuel représente une définition de type générique, à partir de laquelle d'autres types génériques peuvent être construits. (Substitue Type.IsGenericTypeDefinition.)
Propriété publique IsImport Obtient une valeur qui indique si le Type a un attribut appliqué ComImportAttribute, indiquant qu'il a été importé d'une bibliothèque de types COM. (Hérité de Type.)
Propriété publique IsInterface Obtient une valeur indiquant si le Type est une interface, c'est-à-dire ni une classe ni un type valeur. (Hérité de Type.)
Propriété publique IsLayoutSequential Obtient une valeur indiquant si l'attribut de présentation de classe SequentialLayout est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsMarshalByRef Obtient une valeur indiquant si Type est marshalé par référence. (Hérité de Type.)
Propriété publique IsNested Obtient une valeur qui indique si l'objet Type actuel représente un type dont la définition est imbriquée à l'intérieur de la définition d'un autre type. (Hérité de Type.)
Propriété publique IsNestedAssembly Obtient une valeur indiquant si le Type est imbriqué et visible uniquement dans son propre assembly. (Hérité de Type.)
Propriété publique IsNestedFamANDAssem Obtient une valeur indiquant si le Type est imbriqué et visible uniquement par rapport aux classes qui appartiennent à la fois à sa propre famille et à son propre assembly. (Hérité de Type.)
Propriété publique IsNestedFamily Obtient une valeur indiquant si le Type est imbriqué et visible uniquement dans sa propre famille. (Hérité de Type.)
Propriété publique IsNestedFamORAssem Obtient une valeur indiquant si le Type est imbriqué et visible uniquement par rapport aux classes qui appartiennent à sa propre famille ou à son propre assembly. (Hérité de Type.)
Propriété publique IsNestedPrivate Obtient une valeur indiquant si le Type est imbriqué et déclaré privé. (Hérité de Type.)
Propriété publique IsNestedPublic Obtient une valeur indiquant si une classe est imbriquée et déclarée publique. (Hérité de Type.)
Propriété publique IsNotPublic Obtient une valeur indiquant si Type n'est pas déclaré public. (Hérité de Type.)
Propriété publique IsPointer Obtient une valeur indiquant si Type est un pointeur. (Hérité de Type.)
Propriété publique IsPrimitive Obtient une valeur indiquant si le Type est l'un des types primitifs. (Hérité de Type.)
Propriété publique IsPublic Obtient une valeur indiquant si Type est déclaré public. (Hérité de Type.)
Propriété publique IsSealed Obtient une valeur indiquant si le Type est déclaré sealed. (Hérité de Type.)
Propriété publique IsSecurityCritical Obtient une valeur qui indique si le type actuel est critique de sécurité (security-critical) ou critique sécurisé (security-safe-critical) et peut par conséquent exécuter des opérations critiques. (Substitue Type.IsSecurityCritical.)
Propriété publique IsSecuritySafeCritical Obtient une valeur qui indique si le type actuel est critique sécurisé ; autrement dit, s'il peut exécuter des opérations critiques et être accessible par du code transparent. (Substitue Type.IsSecuritySafeCritical.)
Propriété publique IsSecurityTransparent Obtient une valeur qui indique si le type actuel est transparent et ne peut par conséquent pas exécuter d'opérations critiques. (Substitue Type.IsSecurityTransparent.)
Propriété publique IsSerializable Obtient une valeur indiquant si le Type est sérialisable. (Hérité de Type.)
Propriété publique IsSpecialName Obtient une valeur indiquant si le Type a un nom qui nécessite un traitement spécial. (Hérité de Type.)
Propriété publique IsUnicodeClass Obtient une valeur indiquant si l'attribut de format de chaîne UnicodeClass est sélectionné pour le Type. (Hérité de Type.)
Propriété publique IsValueType Obtient une valeur indiquant si le Type est un type valeur. (Hérité de Type.)
Propriété publique IsVisible Obtient une valeur qui indique si Type est accessible par code à l'extérieur de l'assembly. (Hérité de Type.)
Propriété publique MemberType Obtient une valeur MemberTypes qui indique que ce membre est un type ou un type imbriqué. (Hérité de Type.)
Propriété publique MetadataToken Obtient une valeur qui identifie un élément de métadonnées. (Hérité de MemberInfo.)
Propriété publique Module Récupère le module dynamique qui contient cette définition de type. (Substitue Type.Module.)
Propriété publique Name Récupère le nom de ce type. (Substitue MemberInfo.Name.)
Propriété publique Namespace Récupère l'espace de noms dans lequel ce TypeBuilder est défini. (Substitue Type.Namespace.)
Propriété publique PackingSize Récupère la taille de compactage de ce type.
Propriété publique ReflectedType Retourne le type utilisé pour obtenir ce type. (Substitue Type.ReflectedType.)
Propriété publique Size Récupère la taille totale d'un type.
Propriété publique StructLayoutAttribute Obtient un StructLayoutAttribute qui décrit la disposition du type actuel. (Hérité de Type.)
Propriété publique TypeHandle Non pris en charge dans les modules dynamiques. (Substitue Type.TypeHandle.)
Propriété publique TypeInitializer Obtient l'initialiseur de Type. (Hérité de Type.)
Propriété publique TypeToken Retourne le jeton de type de ce type.
Propriété publique UnderlyingSystemType Retourne le type de système sous-jacent pour ce TypeBuilder. (Substitue Type.UnderlyingSystemType.)
Début
  Nom Description
Méthode publique AddDeclarativeSecurity Ajoute une sécurité déclarative à ce type.
Méthode publique AddInterfaceImplementation Ajoute une interface implémentée par ce type.
Méthode publique CreateType Crée un objet Type pour la classe. Une fois les champs et les méthodes définis sur la classe, CreateType est appelé pour charger son objet Type.
Méthode publique DefineConstructor(MethodAttributes, CallingConventions, Type[]) Ajoute un nouveau constructeur au type avec les attributs et la signature donnés.
Méthode publique DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) Ajoute un nouveau constructeur au type avec les attributs, la signature et les modificateurs personnalisés donnés.
Méthode publique DefineDefaultConstructor Définit le constructeur par défaut. Le constructeur défini ici appellera simplement le constructeur par défaut du parent.
Méthode publique DefineEvent Ajoute un nouvel événement au type avec le nom, les attributs et le type d'événement donnés.
Méthode publique DefineField(String, Type, FieldAttributes) Ajoute un nouveau champ au type, avec le nom, les attributs et le type de champ donnés.
Méthode publique DefineField(String, Type, Type[], Type[], FieldAttributes) Ajoute un nouveau champ au type avec le nom, les attributs, le type de champ et les modificateurs personnalisés donnés.
Méthode publique DefineGenericParameters Définit les paramètres de type générique pour le type actuel, en spécifiant leur nombre ainsi que leur nom, et retourne un tableau d'objets GenericTypeParameterBuilder qui peuvent être utilisés pour définir leurs contraintes.
Méthode publique DefineInitializedData Définit un champ de données initialisé dans la section .sdata du fichier exécutable portable.
Méthode publique DefineMethod(String, MethodAttributes) Ajoute une nouvelle méthode au type avec le nom et les attributs de méthode spécifiés.
Méthode publique DefineMethod(String, MethodAttributes, CallingConventions) Ajoute une nouvelle méthode au type avec le nom, les attributs de méthode et la convention d'appel spécifiés.
Méthode publique DefineMethod(String, MethodAttributes, Type, Type[]) Ajoute une nouvelle méthode au type avec le nom, les attributs de méthode et la signature de méthode spécifiés.
Méthode publique DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[]) Ajoute une nouvelle méthode au type avec le nom, les attributs de méthode, la convention d'appel et la signature de méthode spécifiés.
Méthode publique DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) Ajoute une nouvelle méthode au type avec le nom, les attributs de méthode, la convention d'appel, la signature de méthode et les modificateurs personnalisés spécifiés.
Méthode publique DefineMethodOverride Spécifie un corps de méthode donné qui implémente une déclaration de méthode donnée, éventuellement avec un autre nom.
Méthode publique DefineNestedType(String) Définit un type imbriqué en fonction de son nom.
Méthode publique DefineNestedType(String, TypeAttributes) Définit un type imbriqué en fonction de son nom et de ses attributs.
Méthode publique DefineNestedType(String, TypeAttributes, Type) Définit un type imbriqué en fonction de son nom, de ses attributs et du type qu'il étend.
Méthode publique DefineNestedType(String, TypeAttributes, Type, Int32) Définit un type imbriqué en fonction de son nom, de ses attributs, de la taille totale du type et du type qu'il étend.
Méthode publique DefineNestedType(String, TypeAttributes, Type, PackingSize) Définit un type imbriqué en fonction de son nom, de ses attributs, du type qu'il étend et de la taille de compactage.
Méthode publique DefineNestedType(String, TypeAttributes, Type, Type[]) Définit un type imbriqué en fonction de son nom, de ses attributs, du type qu'il étend et de l'interface qu'il implémente.
Méthode publique DefinePInvokeMethod(String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) Définit une méthode PInvoke en fonction de son nom, du nom de la DLL dans laquelle la méthode a été définie, des attributs de la méthode, de sa convention d'appel, de son type de retour, des types de ses paramètres et des indicateurs PInvoke.
Méthode publique DefinePInvokeMethod(String, String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) Définit une méthode PInvoke en fonction de son nom, du nom de la DLL dans laquelle la méthode a été définie, du nom du point d'entrée, des attributs de la méthode, de sa convention d'appel, de son type de retour, des types de ses paramètres et des indicateurs PInvoke.
Méthode publique DefinePInvokeMethod(String, String, String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][], CallingConvention, CharSet) Définit une méthode PInvoke en fonction de son nom, du nom de la DLL dans laquelle la méthode a été définie, du nom du point d'entrée, des attributs de la méthode, de sa convention d'appel, de son type de retour, des types de ses paramètres, des indicateurs PInvoke et des modificateurs personnalisés pour les paramètres et le type de retour.
Méthode publique DefineProperty(String, PropertyAttributes, Type, Type[]) Ajoute une nouvelle propriété au type avec le nom et la signature de propriété donnés.
Méthode publique DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[]) Ajoute une nouvelle propriété au type avec le nom, les attributs, la convention d'appel et la signature de propriété donnés.
Méthode publique DefineProperty(String, PropertyAttributes, Type, Type[], Type[], Type[], Type[][], Type[][]) Ajoute une nouvelle propriété au type avec le nom, la signature de propriété et les modificateurs personnalisés donnés.
Méthode publique DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) Ajoute une nouvelle propriété au type avec le nom, la convention d'appel, la signature de propriété et les modificateurs personnalisés donnés.
Méthode publique DefineTypeInitializer Définit l'initialiseur de ce type.
Méthode publique DefineUninitializedData Définit un champ de données non initialisé dans la section .sdata du fichier exécutable portable (PE, Portable Executable).
Méthode publique Equals(Object) Détermine si le type de système sous-jacent du Type en cours est identique au type de système sous-jacent du Object spécifié. (Hérité de Type.)
Méthode publique Equals(Type) Détermine si le type de système sous-jacent du Type en cours est identique au type de système sous-jacent du Type spécifié. (Hérité de Type.)
Méthode protégée Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique FindInterfaces Retourne un tableau d'objets Type représentant une liste filtrée d'interfaces implémentées ou héritées par le Type en cours. (Hérité de Type.)
Méthode publique FindMembers Retourne un tableau filtré d'objets MemberInfo du type du membre spécifié. (Hérité de Type.)
Méthode publique GetArrayRank Obtient le nombre de dimensions dans un Array. (Hérité de Type.)
Méthode protégée GetAttributeFlagsImpl En cas de substitution dans une classe dérivée, implémente la propriété Attributes et obtient un masque de bits indiquant les attributs associés à Type. (Hérité de Type.)
Méthode publique GetConstructor(Type[]) Recherche un constructeur d'instance public dont les paramètres correspondent aux types contenus dans le tableau spécifié. (Hérité de Type.)
Méthode publique Membre statique GetConstructor(Type, ConstructorInfo) Retourne le constructeur du type générique construit spécifié qui correspond au constructeur spécifié de la définition de type générique.
Méthode publique GetConstructor(BindingFlags, Binder, Type[], ParameterModifier[]) Recherche un constructeur dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés, à l'aide des contraintes de liaison spécifiées. (Hérité de Type.)
Méthode publique GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) Recherche un constructeur dont les paramètres correspondent aux types d'arguments et aux modificateurs spécifiés, en utilisant les contraintes de liaison et la convention d'appel indiquées. (Hérité de Type.)
Méthode protégée GetConstructorImpl En cas de substitution dans une classe dérivée, recherche un constructeur dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés, à l'aide des contraintes de liaison et de la convention d'appel spécifiées. (Hérité de Type.)
Méthode publique GetConstructors() Retourne tous les constructeurs publics définis pour le Type en cours. (Hérité de Type.)
Méthode publique GetConstructors(BindingFlags) Retourne un tableau d'objets ConstructorInfo représentant les constructeurs publics et non publics définis pour cette classe, comme spécifié. (Substitue Type.GetConstructors(BindingFlags).)
Méthode publique GetCustomAttributes(Boolean) Retourne tous les attributs personnalisés définis pour ce type. (Substitue MemberInfo.GetCustomAttributes(Boolean).)
Méthode publique GetCustomAttributes(Type, Boolean) Retourne tous les attributs personnalisés du type actuel qui peuvent être assignés à un type spécifié. (Substitue MemberInfo.GetCustomAttributes(Type, Boolean).)
Méthode publique GetCustomAttributesData Retourne une liste d'objets CustomAttributeData représentant des données relatives aux attributs qui ont été appliqués au membre cible. (Hérité de MemberInfo.)
Méthode publique GetDefaultMembers Recherche les membres définis pour le Type en cours dont le DefaultMemberAttribute est défini. (Hérité de Type.)
Méthode publique GetElementType L'appel de cette méthode lève toujours NotSupportedException. (Substitue Type.GetElementType().)
Méthode publique GetEnumName Retourne le nom de la constante qui a la valeur spécifiée, pour le type énumération actuel. (Hérité de Type.)
Méthode publique GetEnumNames Retourne les noms des membres du type énumération actuel. (Hérité de Type.)
Méthode publique GetEnumUnderlyingType Retourne le type sous-jacent du type énumération actuel. (Hérité de Type.)
Méthode publique GetEnumValues Retourne un tableau des valeurs des constantes dans le type énumération actuel. (Hérité de Type.)
Méthode publique GetEvent(String) Retourne l'objet EventInfo représentant l'événement public spécifié. (Hérité de Type.)
Méthode publique GetEvent(String, BindingFlags) Retourne l'événement avec le nom spécifié. (Substitue Type.GetEvent(String, BindingFlags).)
Méthode publique GetEvents() Retourne les événements publics déclarés ou hérités par ce type. (Substitue Type.GetEvents().)
Méthode publique GetEvents(BindingFlags) Retourne les événements publics et non publics déclarés par ce type. (Substitue Type.GetEvents(BindingFlags).)
Méthode publique GetField(String) Recherche le champ public portant le nom spécifié. (Hérité de Type.)
Méthode publique GetField(String, BindingFlags) Retourne le champ spécifié par le nom donné. (Substitue Type.GetField(String, BindingFlags).)
Méthode publique Membre statique GetField(Type, FieldInfo) Retourne le champ du type générique construit spécifié qui correspond au champ spécifié de la définition de type générique.
Méthode publique GetFields() Retourne tous les champs publics du Type en cours. (Hérité de Type.)
Méthode publique GetFields(BindingFlags) Retourne les champs publics et non publics déclarés par ce type. (Substitue Type.GetFields(BindingFlags).)
Méthode publique GetGenericArguments Retourne un tableau d'objets Type qui représentent les arguments de type d'un type générique ou les paramètres de type d'une définition de type générique. (Substitue Type.GetGenericArguments().)
Méthode publique GetGenericParameterConstraints Retourne un tableau d'objets Type qui représentent les contraintes qui s'exercent sur le paramètre de type générique actuel. (Hérité de Type.)
Méthode publique GetGenericTypeDefinition Retourne un objet Type qui représente une définition de type générique à partir de laquelle le type actuel peut être obtenu. (Substitue Type.GetGenericTypeDefinition().)
Méthode publique GetHashCode Retourne le code de hachage pour cette instance. (Hérité de Type.)
Méthode publique GetInterface(String) Recherche l'interface avec le nom spécifié. (Hérité de Type.)
Méthode publique GetInterface(String, Boolean) Retourne l'interface implémentée (directement ou indirectement) par cette classe avec le nom qualifié complet correspondant au nom d'interface donné. (Substitue Type.GetInterface(String, Boolean).)
Méthode publique GetInterfaceMap Retourne un mappage d'interface pour l'interface demandée. (Substitue Type.GetInterfaceMap(Type).)
Méthode publique GetInterfaces Retourne un tableau de toutes les interfaces implémentées sur ce type et sur ses types de base. (Substitue Type.GetInterfaces().)
Méthode publique GetMember(String) Recherche les membres publics portant le nom spécifié. (Hérité de Type.)
Méthode publique GetMember(String, BindingFlags) Recherche les membres spécifiés, à l'aide des contraintes de liaison spécifiées. (Hérité de Type.)
Méthode publique GetMember(String, MemberTypes, BindingFlags) Retourne tous les membres publics et non publics déclarés ou hérités par ce type, comme spécifié. (Substitue Type.GetMember(String, MemberTypes, BindingFlags).)
Méthode publique GetMembers() Retourne tous les membres publics du Type en cours. (Hérité de Type.)
Méthode publique GetMembers(BindingFlags) Retourne les membres pour les membres publics et non publics déclarés ou hérités par ce type. (Substitue Type.GetMembers(BindingFlags).)
Méthode publique GetMethod(String) Recherche la méthode publique avec le nom spécifié. (Hérité de Type.)
Méthode publique GetMethod(String, BindingFlags) Recherche la méthode spécifiée, à l'aide des contraintes de liaison spécifiées. (Hérité de Type.)
Méthode publique GetMethod(String, Type[]) Recherche la méthode publique spécifiée dont les paramètres correspondent aux types d'arguments spécifiés. (Hérité de Type.)
Méthode publique Membre statique GetMethod(Type, MethodInfo) Retourne la méthode du type générique construit spécifié qui correspond à la méthode spécifiée de la définition de type générique.
Méthode publique GetMethod(String, Type[], ParameterModifier[]) Recherche la méthode publique spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés. (Hérité de Type.)
Méthode publique GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[]) Recherche la méthode spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés, à l'aide des contraintes de liaison spécifiées. (Hérité de Type.)
Méthode publique GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) Recherche la méthode spécifiée dont les paramètres correspondent aux types d'arguments et aux modificateurs spécifiés, en utilisant les contraintes de liaison et la convention d'appel indiquées. (Hérité de Type.)
Méthode protégée GetMethodImpl En cas de substitution dans une classe dérivée, recherche la méthode spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés, à l'aide des contraintes de liaison et de la convention d'appel spécifiées. (Hérité de Type.)
Méthode publique GetMethods() Retourne toutes les méthodes publiques du Type en cours. (Hérité de Type.)
Méthode publique GetMethods(BindingFlags) Retourne toutes les méthodes publiques et non publiques déclarées ou héritées par ce type, comme spécifié. (Substitue Type.GetMethods(BindingFlags).)
Méthode publique GetNestedType(String) Recherche le type imbriqué public avec le nom spécifié. (Hérité de Type.)
Méthode publique GetNestedType(String, BindingFlags) Retourne les types imbriqués publics et non publics déclarés par ce type. (Substitue Type.GetNestedType(String, BindingFlags).)
Méthode publique GetNestedTypes() Retourne les types publics imbriqués dans le Type actuel. (Hérité de Type.)
Méthode publique GetNestedTypes(BindingFlags) Retourne les types imbriqués publics et non publics déclarés ou hérités par ce type. (Substitue Type.GetNestedTypes(BindingFlags).)
Méthode publique GetProperties() Retourne toutes les propriétés publiques du Type en cours. (Hérité de Type.)
Méthode publique GetProperties(BindingFlags) Retourne toutes les propriétés publiques et non publiques déclarées ou héritées par ce type, comme spécifié. (Substitue Type.GetProperties(BindingFlags).)
Méthode publique GetProperty(String) Recherche la propriété publique avec le nom spécifié. (Hérité de Type.)
Méthode publique GetProperty(String, BindingFlags) Recherche la propriété spécifiée, à l'aide des contraintes de liaison spécifiées. (Hérité de Type.)
Méthode publique GetProperty(String, Type) Recherche la propriété publique à l'aide du nom et du type de retour spécifiés. (Hérité de Type.)
Méthode publique GetProperty(String, Type[]) Recherche la propriété publique spécifiée dont les paramètres correspondent aux types d'arguments spécifiés. (Hérité de Type.)
Méthode publique GetProperty(String, Type, Type[]) Recherche la propriété publique spécifiée dont les paramètres correspondent aux types d'arguments spécifiés. (Hérité de Type.)
Méthode publique GetProperty(String, Type, Type[], ParameterModifier[]) Recherche la propriété publique spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés. (Hérité de Type.)
Méthode publique GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) Recherche la propriété spécifiée dont les paramètres correspondent aux types d'arguments et aux modificateurs spécifiés, en utilisant les contraintes de liaison indiquées. (Hérité de Type.)
Méthode protégée GetPropertyImpl En cas de substitution dans une classe dérivée, recherche la propriété spécifiée dont les paramètres correspondent aux types d'arguments et modificateurs spécifiés, en utilisant les contraintes de liaison indiquées. (Hérité de Type.)
Méthode publique GetType() Obtient le Type en cours. (Hérité de Type.)
Méthode protégée GetTypeCodeImpl Retourne le code du type sous-jacent du Type spécifié. (Hérité de Type.)
Méthode protégée HasElementTypeImpl En cas de substitution dans une classe dérivée, implémente la propriété HasElementType et détermine si le Type en cours englobe ou se réfère à un autre type ; c'est-à-dire si le Type en cours est un tableau ou un pointeur ou encore s'il est passé par référence. (Hérité de Type.)
Méthode publique InvokeMember(String, BindingFlags, Binder, Object, Object[]) Appelle le membre défini, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments spécifiée. (Hérité de Type.)
Méthode publique InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) Appelle le membre spécifié, à l'aide des contraintes de liaison spécifiées et correspondant à la liste d'arguments et à la culture spécifiées. (Hérité de Type.)
Méthode publique InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) Appelle le membre spécifié. La méthode à appeler doit être accessible et fournir la correspondance la plus proche avec la liste d'arguments spécifiée, avec les contraintes du binder et des attributs d'appel spécifiés. (Substitue Type.InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).)
Méthode protégée IsArrayImpl En cas de substitution dans une classe dérivée, implémente la propriété IsArray et détermine si Type est un tableau. (Hérité de Type.)
Méthode publique IsAssignableFrom Détermine si une instance du Type en cours peut être assignée à partir d'une instance du Type spécifié. (Substitue Type.IsAssignableFrom(Type).)
Méthode protégée IsByRefImpl En cas de substitution dans une classe dérivée, implémente la propriété IsByRef et détermine si le Type est passé par référence. (Hérité de Type.)
Méthode protégée IsCOMObjectImpl En cas de substitution dans une classe dérivée, implémente la propriété IsCOMObject et détermine si le Type est un objet COM. (Hérité de Type.)
Méthode protégée IsContextfulImpl Implémente la propriété IsContextful et détermine si Type peut être hébergé dans un contexte. (Hérité de Type.)
Méthode publique IsCreated Retourne une valeur indiquant si le type dynamique actuel a été créé.
Méthode publique IsDefined Détermine si un attribut personnalisé est appliqué au type actuel. (Substitue MemberInfo.IsDefined(Type, Boolean).)
Méthode publique IsEnumDefined Retourne une valeur qui indique si la valeur spécifiée existe dans le type énumération actuel. (Hérité de Type.)
Méthode publique IsEquivalentTo Détermine si deux types COM ont la même identité et prennent en charge l'équivalence de type. (Hérité de Type.)
Méthode publique IsInstanceOfType Détermine si l'objet spécifié est une instance du Type en cours. (Hérité de Type.)
Méthode protégée IsMarshalByRefImpl Implémente la propriété IsMarshalByRef et détermine si le Type est marshalé par référence. (Hérité de Type.)
Méthode protégée IsPointerImpl En cas de substitution dans une classe dérivée, implémente la propriété IsPointer et détermine si le Type est un pointeur. (Hérité de Type.)
Méthode protégée IsPrimitiveImpl En cas de substitution dans une classe dérivée, implémente la propriété IsPrimitive et détermine si Type est l'un des types primitifs. (Hérité de Type.)
Méthode publique IsSubclassOf Détermine si ce type est dérivé d'un type spécifié. (Substitue Type.IsSubclassOf(Type).)
Méthode protégée IsValueTypeImpl Implémente la propriété IsValueType et détermine si le Type est un type valeur, c'est-à-dire ni une classe ni une interface. (Hérité de Type.)
Méthode publique MakeArrayType() Retourne un objet Type qui représente un tableau unidimensionnel du type actuel, avec une limite inférieure de zéro. (Substitue Type.MakeArrayType().)
Méthode publique MakeArrayType(Int32) Retourne un objet Type qui représente un tableau du type actuel, avec le nombre spécifié de dimensions. (Substitue Type.MakeArrayType(Int32).)
Méthode publique MakeByRefType Retourne un objet Type qui représente le type actuel lorsqu'il est passé en tant que paramètre ref (ByRef en Visual Basic). (Substitue Type.MakeByRefType().)
Méthode publique MakeGenericType Substitue les éléments d'un tableau de types aux paramètres de type de la définition de type générique actuelle et retourne le type construit résultant. (Substitue Type.MakeGenericType(Type[]).)
Méthode publique MakePointerType Retourne un objet Type qui représente le type d'un pointeur non managé vers le type actuel. (Substitue Type.MakePointerType().)
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publique SetCustomAttribute(CustomAttributeBuilder) Définit un attribut personnalisé à l'aide d'un générateur d'attributs personnalisés.
Méthode publique SetCustomAttribute(ConstructorInfo, Byte[]) Définit un attribut personnalisé à l'aide d'un blob d'attribut personnalisé spécifié.
Méthode publique SetParent Définit le type de base du type actuellement en construction.
Méthode publique ToString Retourne le nom du type sans l'espace de noms. (Substitue Type.ToString().)
Début
  Nom Description
Champ public Membre statique UnspecifiedTypeSize Représente la non-spécification de la taille totale pour le type.
Début
  Nom Description
Implémentation d'interface explicite Méthode privée _MemberInfo.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de MemberInfo.)
Implémentation d'interface explicite Méthode privée _MemberInfo.GetType Obtient un objet Type représentant la classe MemberInfo. (Hérité de MemberInfo.)
Implémentation d'interface explicite Méthode privée _MemberInfo.GetTypeInfo Récupère les informations de type pour un objet, qui peuvent être utilisées ensuite pour obtenir les informations de type d'une interface. (Hérité de MemberInfo.)
Implémentation d'interface explicite Méthode privée _MemberInfo.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de MemberInfo.)
Implémentation d'interface explicite Méthode privée _MemberInfo.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet. (Hérité de MemberInfo.)
Implémentation d'interface explicite Méthode privée _Type.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Type.)
Implémentation d'interface explicite Méthode privée _Type.GetTypeInfo Récupère les informations de type pour un objet, qui peuvent être utilisées ensuite pour obtenir les informations de type d'une interface. (Hérité de Type.)
Implémentation d'interface explicite Méthode privée _Type.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de Type.)
Implémentation d'interface explicite Méthode privée _Type.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet. (Hérité de Type.)
Implémentation d'interface explicite Méthode privée _TypeBuilder.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.
Implémentation d'interface explicite Méthode privée _TypeBuilder.GetTypeInfo Récupère les informations de type pour un objet, qui peuvent être utilisées ensuite pour obtenir les informations de type d'une interface.
Implémentation d'interface explicite Méthode privée _TypeBuilder.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).
Implémentation d'interface explicite Méthode privée _TypeBuilder.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet.
Début

TypeBuilder est la classe racine utilisée pour contrôler la création de classes dynamiques dans le runtime. TypeBuilder fournit un jeu de routines qui sont utilisées pour définir des classes, ajouter des méthodes et des champs et créer la classe dans le runtime. Il est possible de créer un nouveau TypeBuilder à partir d'un module dynamique.

Pour créer un type de tableau, un type pointeur ou un type byref pour un type incomplet représenté par un objet TypeBuilder, utilisez la méthode MakeArrayType, la méthode MakePointerType ou la méthode MakeByRefType, respectivement.

Remarque Remarque

L'attribut HostProtectionAttribute appliqué à ce type ou membre a la valeur de propriété Resources suivante : MayLeakOnAbort. HostProtectionAttribute n'affecte pas les applications bureautiques (qui sont généralement démarrées en double-cliquant sur une icône, en tapant une commande ou en entrant une URL dans un navigateur). Pour plus d'informations, consultez la classe HostProtectionAttribute ou Attributs de programmation et de protection des hôtes SQL Server.

Cette section comprend deux exemples de code. Le premier exemple montre la façon de créer un type dynamique avec un champ, un constructeur, une propriété et une méthode. Le deuxième exemple montre comment une méthode peut être dynamiquement générée à partir d'entrées d'utilisateur.

Premier exemple

L'exemple de code suivant montre la façon de définir un assembly dynamique avec un seul module. Dans cet exemple d'assembly, le module contient un seul type, MyDynamicType, qui a un champ privé, une propriété qui obtient et définit le champ privé, des constructeurs qui initialisent le champ privé, et une méthode qui multiplie un nombre fourni par l'utilisateur par la valeur du champ privé et qui retourne le résultat.

Le champ AssemblyBuilderAccess.RunAndSave est spécifié quand l'assembly est créé. Le code assembleur est utilisé immédiatement, et l'assembly est également enregistré sur le disque afin qu'il puisse être examiné par Ildasm.exe (Désassembleur MSIL) ou utilisé dans un autre programme.


using System;
using System.Reflection;
using System.Reflection.Emit;

class DemoAssemblyBuilder
{
    public static void Main()
    {
        // An assembly consists of one or more modules, each of which
        // contains zero or more types. This code creates a single-module
        // assembly, the most common case. The module contains one type,
        // named "MyDynamicType", that has a private field, a property 
        // that gets and sets the private field, constructors that 
        // initialize the private field, and a method that multiplies 
        // a user-supplied number by the private field value and returns
        // the result. In C# the type might look like this:
        /*
        public class MyDynamicType
        {
            private int m_number;

            public MyDynamicType() : this(42) {}
            public MyDynamicType(int initNumber)
            {
                m_number = initNumber;
            }

            public int Number
            {
                get { return m_number; }
                set { m_number = value; }
            }

            public int MyMethod(int multiplier)
            {
                return m_number * multiplier;
            }
        }
        */

        AssemblyName aName = new AssemblyName("DynamicAssemblyExample");
        AssemblyBuilder ab = 
            AppDomain.CurrentDomain.DefineDynamicAssembly(
                aName, 
                AssemblyBuilderAccess.RunAndSave);

        // For a single-module assembly, the module name is usually
        // the assembly name plus an extension.
        ModuleBuilder mb = 
            ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");

        TypeBuilder tb = mb.DefineType(
            "MyDynamicType", 
             TypeAttributes.Public);

        // Add a private field of type int (Int32).
        FieldBuilder fbNumber = tb.DefineField(
            "m_number", 
            typeof(int), 
            FieldAttributes.Private);

        // Define a constructor that takes an integer argument and 
        // stores it in the private field. 
        Type[] parameterTypes = { typeof(int) };
        ConstructorBuilder ctor1 = tb.DefineConstructor(
            MethodAttributes.Public, 
            CallingConventions.Standard, 
            parameterTypes);

        ILGenerator ctor1IL = ctor1.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before calling the base
        // class constructor. Specify the default constructor of the 
        // base class (System.Object) by passing an empty array of 
        // types (Type.EmptyTypes) to GetConstructor.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ctor1IL.Emit(OpCodes.Call, 
            typeof(object).GetConstructor(Type.EmptyTypes));
        // Push the instance on the stack before pushing the argument
        // that is to be assigned to the private field m_number.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ctor1IL.Emit(OpCodes.Ldarg_1);
        ctor1IL.Emit(OpCodes.Stfld, fbNumber);
        ctor1IL.Emit(OpCodes.Ret);

        // Define a default constructor that supplies a default value
        // for the private field. For parameter types, pass the empty
        // array of types or pass null.
        ConstructorBuilder ctor0 = tb.DefineConstructor(
            MethodAttributes.Public, 
            CallingConventions.Standard, 
            Type.EmptyTypes);

        ILGenerator ctor0IL = ctor0.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before pushing the default
        // value on the stack, then call constructor ctor1.
        ctor0IL.Emit(OpCodes.Ldarg_0);
        ctor0IL.Emit(OpCodes.Ldc_I4_S, 42);
        ctor0IL.Emit(OpCodes.Call, ctor1);
        ctor0IL.Emit(OpCodes.Ret);

        // Define a property named Number that gets and sets the private 
        // field.
        //
        // The last argument of DefineProperty is null, because the
        // property has no parameters. (If you don't specify null, you must
        // specify an array of Type objects. For a parameterless property,
        // use the built-in array with no elements: Type.EmptyTypes)
        PropertyBuilder pbNumber = tb.DefineProperty(
            "Number", 
            PropertyAttributes.HasDefault, 
            typeof(int), 
            null);

        // The property "set" and property "get" methods require a special
        // set of attributes.
        MethodAttributes getSetAttr = MethodAttributes.Public | 
            MethodAttributes.SpecialName | MethodAttributes.HideBySig;

        // Define the "get" accessor method for Number. The method returns
        // an integer and has no arguments. (Note that null could be 
        // used instead of Types.EmptyTypes)
        MethodBuilder mbNumberGetAccessor = tb.DefineMethod(
            "get_Number", 
            getSetAttr, 
            typeof(int), 
            Type.EmptyTypes);

        ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
        // For an instance property, argument zero is the instance. Load the 
        // instance, then load the private field and return, leaving the
        // field value on the stack.
        numberGetIL.Emit(OpCodes.Ldarg_0);
        numberGetIL.Emit(OpCodes.Ldfld, fbNumber);
        numberGetIL.Emit(OpCodes.Ret);

        // Define the "set" accessor method for Number, which has no return
        // type and takes one argument of type int (Int32).
        MethodBuilder mbNumberSetAccessor = tb.DefineMethod(
            "set_Number", 
            getSetAttr, 
            null, 
            new Type[] { typeof(int) });

        ILGenerator numberSetIL = mbNumberSetAccessor.GetILGenerator();
        // Load the instance and then the numeric argument, then store the
        // argument in the field.
        numberSetIL.Emit(OpCodes.Ldarg_0);
        numberSetIL.Emit(OpCodes.Ldarg_1);
        numberSetIL.Emit(OpCodes.Stfld, fbNumber);
        numberSetIL.Emit(OpCodes.Ret);

        // Last, map the "get" and "set" accessor methods to the 
        // PropertyBuilder. The property is now complete. 
        pbNumber.SetGetMethod(mbNumberGetAccessor);
        pbNumber.SetSetMethod(mbNumberSetAccessor);

        // Define a method that accepts an integer argument and returns
        // the product of that integer and the private field m_number. This
        // time, the array of parameter types is created on the fly.
        MethodBuilder meth = tb.DefineMethod(
            "MyMethod", 
            MethodAttributes.Public, 
            typeof(int), 
            new Type[] { typeof(int) });

        ILGenerator methIL = meth.GetILGenerator();
        // To retrieve the private instance field, load the instance it
        // belongs to (argument zero). After loading the field, load the 
        // argument one and then multiply. Return from the method with 
        // the return value (the product of the two numbers) on the 
        // execution stack.
        methIL.Emit(OpCodes.Ldarg_0);
        methIL.Emit(OpCodes.Ldfld, fbNumber);
        methIL.Emit(OpCodes.Ldarg_1);
        methIL.Emit(OpCodes.Mul);
        methIL.Emit(OpCodes.Ret);

        // Finish the type.
        Type t = tb.CreateType();

        // The following line saves the single-module assembly. This
        // requires AssemblyBuilderAccess to include Save. You can now
        // type "ildasm MyDynamicAsm.dll" at the command prompt, and 
        // examine the assembly. You can also write a program that has
        // a reference to the assembly, and use the MyDynamicType type.
        // 
        ab.Save(aName.Name + ".dll");

        // Because AssemblyBuilderAccess includes Run, the code can be
        // executed immediately. Start by getting reflection objects for
        // the method and the property.
        MethodInfo mi = t.GetMethod("MyMethod");
        PropertyInfo pi = t.GetProperty("Number");

        // Create an instance of MyDynamicType using the default 
        // constructor. 
        object o1 = Activator.CreateInstance(t);

        // Display the value of the property, then change it to 127 and 
        // display it again. Use null to indicate that the property
        // has no index.
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, null));
        pi.SetValue(o1, 127, null);
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, null));

        // Call MyMethod, passing 22, and display the return value, 22
        // times 127. Arguments must be passed as an array, even when
        // there is only one.
        object[] arguments = { 22 };
        Console.WriteLine("o1.MyMethod(22): {0}", 
            mi.Invoke(o1, arguments));

        // Create an instance of MyDynamicType using the constructor
        // that specifies m_Number. The constructor is identified by
        // matching the types in the argument array. In this case, 
        // the argument array is created on the fly. Display the 
        // property value.
        object o2 = Activator.CreateInstance(t, 
            new object[] { 5280 });
        Console.WriteLine("o2.Number: {0}", pi.GetValue(o2, null));
    }
}

/* This code produces the following output:

o1.Number: 42
o1.Number: 127
o1.MyMethod(22): 2794
o2.Number: 5280
 */


Deuxième exemple

L'exemple de code suivant montre comment générer un type dynamique à l'aide de TypeBuilder.



using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;


class TestILGenerator {

  	public static Type DynamicDotProductGen() {
	  
	   Type ivType = null;
	   Type[] ctorParams = new Type[] { typeof(int),
		               		    typeof(int),
					    typeof(int)};
 	
	   AppDomain myDomain = Thread.GetDomain();
	   AssemblyName myAsmName = new AssemblyName();
	   myAsmName.Name = "IntVectorAsm";
	
	   AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
					  myAsmName, 
					  AssemblyBuilderAccess.RunAndSave);

   	   ModuleBuilder IntVectorModule = myAsmBuilder.DefineDynamicModule("IntVectorModule",
									    "Vector.dll");

	   TypeBuilder ivTypeBld = IntVectorModule.DefineType("IntVector",
						              TypeAttributes.Public);

	   FieldBuilder xField = ivTypeBld.DefineField("x", typeof(int),
                                                       FieldAttributes.Private);
	   FieldBuilder yField = ivTypeBld.DefineField("y", typeof(int), 
                                                       FieldAttributes.Private);
	   FieldBuilder zField = ivTypeBld.DefineField("z", typeof(int),
                                                       FieldAttributes.Private);


           Type objType = Type.GetType("System.Object"); 
           ConstructorInfo objCtor = objType.GetConstructor(new Type[0]);

	   ConstructorBuilder ivCtor = ivTypeBld.DefineConstructor(
					  MethodAttributes.Public,
					  CallingConventions.Standard,
					  ctorParams);
	   ILGenerator ctorIL = ivCtor.GetILGenerator();
           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Call, objCtor);
           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_1);
           ctorIL.Emit(OpCodes.Stfld, xField); 
           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_2);
           ctorIL.Emit(OpCodes.Stfld, yField); 
           ctorIL.Emit(OpCodes.Ldarg_0);
           ctorIL.Emit(OpCodes.Ldarg_3);
           ctorIL.Emit(OpCodes.Stfld, zField); 
	   ctorIL.Emit(OpCodes.Ret); 


	   // This method will find the dot product of the stored vector
	   // with another.

	   Type[] dpParams = new Type[] { ivTypeBld };

           // Here, you create a MethodBuilder containing the
	   // name, the attributes (public, static, private, and so on),
	   // the return type (int, in this case), and a array of Type
	   // indicating the type of each parameter. Since the sole parameter
	   // is a IntVector, the very class you're creating, you will
	   // pass in the TypeBuilder (which is derived from Type) instead of 
	   // a Type object for IntVector, avoiding an exception. 

	   // -- This method would be declared in C# as:
	   //    public int DotProduct(IntVector aVector)

           MethodBuilder dotProductMthd = ivTypeBld.DefineMethod(
	    		                  "DotProduct", 
				          MethodAttributes.Public,
                                          typeof(int), 
                                          dpParams);

	   // A ILGenerator can now be spawned, attached to the MethodBuilder.

	   ILGenerator mthdIL = dotProductMthd.GetILGenerator();
	   
 	   // Here's the body of our function, in MSIL form. We're going to find the
	   // "dot product" of the current vector instance with the passed vector 
	   // instance. For reference purposes, the equation is:
	   // (x1 * x2) + (y1 * y2) + (z1 * z2) = the dot product

	   // First, you'll load the reference to the current instance "this"
	   // stored in argument 0 (ldarg.0) onto the stack. Ldfld, the subsequent
	   // instruction, will pop the reference off the stack and look up the
	   // field "x", specified by the FieldInfo token "xField".

	   mthdIL.Emit(OpCodes.Ldarg_0);
	   mthdIL.Emit(OpCodes.Ldfld, xField);

	   // That completed, the value stored at field "x" is now atop the stack.
	   // Now, you'll do the same for the object reference we passed as a
	   // parameter, stored in argument 1 (ldarg.1). After Ldfld executed,
	   // you'll have the value stored in field "x" for the passed instance
	   // atop the stack.

	   mthdIL.Emit(OpCodes.Ldarg_1);
	   mthdIL.Emit(OpCodes.Ldfld, xField);

           // There will now be two values atop the stack - the "x" value for the
	   // current vector instance, and the "x" value for the passed instance.
	   // You'll now multiply them, and push the result onto the evaluation stack.

	   mthdIL.Emit(OpCodes.Mul_Ovf_Un);

	   // Now, repeat this for the "y" fields of both vectors.

	   mthdIL.Emit(OpCodes.Ldarg_0);
	   mthdIL.Emit(OpCodes.Ldfld, yField);
	   mthdIL.Emit(OpCodes.Ldarg_1);
	   mthdIL.Emit(OpCodes.Ldfld, yField);
	   mthdIL.Emit(OpCodes.Mul_Ovf_Un);

	   // At this time, the results of both multiplications should be atop
	   // the stack. You'll now add them and push the result onto the stack.

	   mthdIL.Emit(OpCodes.Add_Ovf_Un);

	   // Multiply both "z" field and push the result onto the stack.
	   mthdIL.Emit(OpCodes.Ldarg_0);
	   mthdIL.Emit(OpCodes.Ldfld, zField);
	   mthdIL.Emit(OpCodes.Ldarg_1);
	   mthdIL.Emit(OpCodes.Ldfld, zField);
	   mthdIL.Emit(OpCodes.Mul_Ovf_Un);

	   // Finally, add the result of multiplying the "z" fields with the
	   // result of the earlier addition, and push the result - the dot product -
	   // onto the stack.
	   mthdIL.Emit(OpCodes.Add_Ovf_Un);

	   // The "ret" opcode will pop the last value from the stack and return it
	   // to the calling method. You're all done!

	   mthdIL.Emit(OpCodes.Ret);


 	   ivType = ivTypeBld.CreateType();

	   return ivType;

 	}

	public static void Main() {
	
	   Type IVType = null;
           object aVector1 = null;
           object aVector2 = null;
	   Type[] aVtypes = new Type[] {typeof(int), typeof(int), typeof(int)};
           object[] aVargs1 = new object[] {10, 10, 10};
           object[] aVargs2 = new object[] {20, 20, 20};
	
	   // Call the  method to build our dynamic class.

	   IVType = DynamicDotProductGen();

           Console.WriteLine("---");

	   ConstructorInfo myDTctor = IVType.GetConstructor(aVtypes);
	   aVector1 = myDTctor.Invoke(aVargs1);
	   aVector2 = myDTctor.Invoke(aVargs2);

	   object[] passMe = new object[1];
           passMe[0] = (object)aVector2; 

	   Console.WriteLine("(10, 10, 10) . (20, 20, 20) = {0}",
			     IVType.InvokeMember("DotProduct",
						  BindingFlags.InvokeMethod,
						  null,
						  aVector1,
						  passMe));

	    

	   // +++ OUTPUT +++
	   // ---
	   // (10, 10, 10) . (20, 20, 20) = 600 
	    
	}

}



.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ