DynamicMethod Constructeurs

Définition

Crée une méthode dynamique.Creates a dynamic method.

Surcharges

DynamicMethod(String, Type, Type[])

Initialise une méthode dynamique hébergée de manière anonyme, en spécifiant le nom de la méthode, le type de retour et les types de paramètres.Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

DynamicMethod(String, Type, Type[], Boolean)

Initialise une méthode dynamique hébergée de façon anonyme, en spécifiant le nom de la méthode, le type de retour, les types de paramètre et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[], Module)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, le type de retour, les types de paramètres et le module.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, and module.

DynamicMethod(String, Type, Type[], Type)

Crée une méthode dynamique, en spécifiant le nom de la méthode, le type de retour, les types de paramètres et le type avec lequel la méthode dynamique est logiquement associée.Creates a dynamic method, specifying the method name, return type, parameter types, and the type with which the dynamic method is logically associated.

DynamicMethod(String, Type, Type[], Module, Boolean)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, le type de retour, les types de paramètre, le module et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels a accès le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[], Type, Boolean)

Crée une méthode dynamique, en spécifiant le nom de la méthode, le type de retour, les types de paramètre, le type auquel la méthode dynamique est associée logiquement, et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method, specifying the method name, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, les attributs, les conventions d'appel, le type de retour, les types de paramètres, le module et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage Microsoft Intermediate Language (MSIL) de la méthode dynamique.Creates a dynamic method that is global to a module, specifying the method name, attributes, calling convention, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)

Crée une méthode dynamique, en spécifiant le nom de la méthode, les attributs, la convention d’appel, le type de retour, les types de paramètre, le type auquel la méthode dynamique est associée logiquement, et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method, specifying the method name, attributes, calling convention, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[])

Initialise une méthode dynamique hébergée de manière anonyme, en spécifiant le nom de la méthode, le type de retour et les types de paramètres.Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type())

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

name a la valeur null.name is null.

returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Remarques

La méthode dynamique créée par ce constructeur est associée à un assembly anonyme au lieu d’un type ou d’un module existant.The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. L’assembly anonyme existe uniquement pour fournir un environnement de bac à sable (sandbox) pour les méthodes dynamiques, autrement dit, pour les isoler d’un autre code.The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. Cet environnement permet de sécuriser l’émission et l’exécution de la méthode dynamique par du code de confiance partielle.This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

Ce constructeur spécifie que les contrôles de visibilité juste-à-temps (JIT) seront appliqués pour le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.This constructor specifies that just-in-time (JIT) visibility checks will be enforced for the Microsoft intermediate language (MSIL) of the dynamic method. Autrement dit, le code de la méthode dynamique a accès aux méthodes publiques des classes publiques.That is, the code in the dynamic method has access to public methods of public classes. Les exceptions sont levées si la méthode tente d’accéder aux types ou aux membres private, protectedou internal (Friend dans Visual Basic).Exceptions are thrown if the method tries to access types or members that are private, protected, or internal (Friend in Visual Basic). Pour créer une méthode dynamique qui a une capacité restreinte d’ignorer les contrôles de visibilité JIT, utilisez le constructeur DynamicMethod(String, Type, Type[], Boolean).To create a dynamic method that has restricted ability to skip JIT visibility checks, use the DynamicMethod(String, Type, Type[], Boolean) constructor.

Quand une méthode dynamique hébergée anonymement est construite, la pile des appels de l’assembly émetteur est incluse.When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. Lorsque la méthode est appelée, les autorisations de l’assembly émetteur sont utilisées à la place des autorisations de l’appelant réel.When the method is invoked, the permissions of the emitting assembly are used instead of the permissions of the actual caller. Par conséquent, la méthode dynamique ne peut pas s’exécuter à un niveau de privilège supérieur à celui de l’assembly qui l’a émis, même si elle est passée et exécutée par un assembly qui a un niveau de confiance plus élevé.Thus, the dynamic method cannot execute at a higher level of privilege than that of the assembly that emitted it, even if it is passed to and executed by an assembly that has a higher trust level.

Ce constructeur spécifie les attributs de méthode MethodAttributes.Public et MethodAttributes.Static, ainsi que la Convention d’appel CallingConventions.Standard.This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

Notes

Ce constructeur a été introduit dans la .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

Voir aussi

DynamicMethod(String, Type, Type[], Boolean)

Initialise une méthode dynamique hébergée de façon anonyme, en spécifiant le nom de la méthode, le type de retour, les types de paramètre et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), restrictedSkipVisibility As Boolean)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

restrictedSkipVisibility
Boolean

true pour ignorer les contrôles de visibilité juste-à-temps pour les types et membres auxquels accède le langage MSIL de la méthode dynamique, avec cette restriction : le niveau d’approbation des assemblys qui contiennent ces types et membres doit être inférieur ou égal à celui de la pile des appels qui émet la méthode dynamique ; sinon, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method, with this restriction: the trust level of the assemblies that contain those types and members must be equal to or less than the trust level of the call stack that emits the dynamic method; otherwise, false.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

name a la valeur null.name is null.

returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Remarques

La méthode dynamique créée par ce constructeur est associée à un assembly anonyme au lieu d’un type ou d’un module existant.The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. L’assembly anonyme existe uniquement pour fournir un environnement de bac à sable (sandbox) pour les méthodes dynamiques, autrement dit, pour les isoler d’un autre code.The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. Cet environnement permet de sécuriser l’émission et l’exécution de la méthode dynamique par du code de confiance partielle.This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

Les méthodes dynamiques hébergées anonymement n’ont pas d’accès automatique aux types ou aux membres private, protectedou internal (Friend dans Visual Basic).Anonymously hosted dynamic methods do not have automatic access to any types or members that are private, protected, or internal (Friend in Visual Basic). Cela diffère des méthodes dynamiques associées à un type ou à un module existant, qui ont accès aux membres masqués dans leur portée associée.This is different from dynamic methods that are associated with an existing type or module, which have access to hidden members in their associated scope.

Spécifiez true pour restrictedSkipVisibility si votre méthode dynamique doit accéder aux types ou aux membres qui sont private, protectedou internal.Specify true for restrictedSkipVisibility if your dynamic method has to access types or members that are private, protected, or internal. Cela donne à la méthode dynamique un accès restreint à ces membres.This gives the dynamic method restricted access to these members. Autrement dit, les membres sont accessibles uniquement si les conditions suivantes sont remplies :That is, the members can be accessed only if the following conditions are met:

  • Les membres cibles appartiennent à un assembly dont le niveau de confiance est inférieur ou égal à la pile des appels qui émet la méthode dynamique.The target members belong to an assembly that has a level of trust equal to or lower than the call stack that emits the dynamic method.

  • La pile des appels qui émet la méthode dynamique est accordée ReflectionPermission avec l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess.The call stack that emits the dynamic method is granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag. Il s’agit toujours de la valeur true lorsque le code est exécuté avec un niveau de confiance totale.This is always true when the code is executed with full trust. Pour le code partiellement fiable, la valeur est true uniquement si l’hôte accorde explicitement l’autorisation.For partially trusted code, it is true only if the host explicitly grants the permission.

    Important

    Si l’autorisation n’a pas été accordée, une exception de sécurité est levée lorsque CreateDelegate est appelée ou lorsque la méthode dynamique est appelée, et non quand ce constructeur est appelé.If the permission has not been granted, a security exception is thrown when CreateDelegate is called or when the dynamic method is invoked, not when this constructor is called. Aucune autorisation spéciale n’est requise pour émettre la méthode dynamique.No special permissions are required to emit the dynamic method.

Par exemple, une méthode dynamique créée avec restrictedSkipVisibility définie sur true peut accéder à un membre privé de n’importe quel assembly sur la pile des appels si l’accès au membre restreint a été accordé à la pile des appels.For example, a dynamic method that is created with restrictedSkipVisibility set to true can access a private member of any assembly on the call stack if the call stack has been granted restricted member access. Si la méthode dynamique est créée avec un code d’un niveau de confiance partiel sur la pile des appels, elle ne peut pas accéder à un membre privé d’un type dans un assembly .NET Framework.NET Framework, car ces assemblys sont d’un niveau de confiance suffisant.If the dynamic method is created with partially trusted code on the call stack, it cannot access a private member of a type in a .NET Framework.NET Framework assembly, because such assemblies are fully trusted.

Si restrictedSkipVisibility est false, les contrôles de visibilité JIT sont appliqués.If restrictedSkipVisibility is false, JIT visibility checks are enforced. Le code dans la méthode dynamique a accès aux méthodes publiques des classes publiques, et les exceptions sont levées s’il tente d’accéder aux types ou aux membres qui sont private, protectedou internal.The code in the dynamic method has access to public methods of public classes, and exceptions are thrown if it tries to access types or members that are private, protected, or internal.

Quand une méthode dynamique hébergée anonymement est construite, la pile des appels de l’assembly émetteur est incluse.When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. Lorsque la méthode est appelée, les autorisations de la pile des appels émettrice sont utilisées à la place des autorisations de l’appelant réel.When the method is invoked, the permissions of the emitting call stack are used instead of the permissions of the actual caller. Par conséquent, la méthode dynamique ne peut pas s’exécuter à un niveau de privilège supérieur à celui de l’assembly qui l’a émis, même si elle est passée et exécutée par un assembly qui a un niveau de confiance plus élevé.Thus, the dynamic method cannot execute at a higher level of privilege than that of the assembly that emitted it, even if it is passed to and executed by an assembly that has a higher trust level.

Ce constructeur spécifie les attributs de méthode MethodAttributes.Public et MethodAttributes.Static, ainsi que la Convention d’appel CallingConventions.Standard.This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

Notes

Ce constructeur a été introduit dans la .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

Voir aussi

DynamicMethod(String, Type, Type[], Module)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, le type de retour, les types de paramètres et le module.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, and module.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

Module représentant le module auquel la méthode dynamique doit être associée de manière logique.A Module representing the module with which the dynamic method is to be logically associated.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- m est un module qui fournit l’hébergement anonyme pour les méthodes dynamiques.m is a module that provides anonymous hosting for dynamic methods.

name a la valeur null.name is null.

- ou --or- m a la valeur null.m is null.

returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Exemples

L’exemple de code suivant crée une méthode dynamique qui accepte deux paramètres.The following code example creates a dynamic method that takes two parameters. L’exemple émet un corps de fonction simple qui imprime le premier paramètre de la console, et l’exemple utilise le deuxième paramètre comme valeur de retour de la méthode.The example emits a simple function body that prints the first parameter to the console, and the example uses the second parameter as the return value of the method. L’exemple termine la méthode en créant un délégué, appelle le délégué avec des paramètres différents, puis appelle la méthode dynamique à l’aide de la méthode Invoke(Object, BindingFlags, Binder, Object[], CultureInfo).The example completes the method by creating a delegate, invokes the delegate with different parameters, and finally invokes the dynamic method using the Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) method.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

public ref class Test
{   
};

// Declare a delegate that will be used to execute the completed
// dynamic method.
delegate int HelloInvoker(String^ msg, int ret);

int main()
{
    // Create an array that specifies the types of the parameters
    // of the dynamic method. This method has a string parameter
    // and an int parameter.
    array<Type^>^ helloArgs = {String::typeid, int::typeid};

    // Create a dynamic method with the name "Hello", a return type
    // of int, and two parameters whose types are specified by the
    // array helloArgs. Create the method in the module that
    // defines the Test class.
    DynamicMethod^ hello = gcnew DynamicMethod("Hello", 
        int::typeid,
        helloArgs,
        Test::typeid->Module);

    // Create an array that specifies the parameter types of the
    // overload of Console.WriteLine to be used in Hello.
    array<Type^>^ writeStringArgs = {String::typeid};
    // Get the overload of Console.WriteLine that has one
    // String parameter.
    MethodInfo^ writeString =
        Console::typeid->GetMethod("WriteLine", writeStringArgs);

    // Get an ILGenerator and emit a body for the dynamic method.
    ILGenerator^ ilgen = hello->GetILGenerator();
    // Load the first argument, which is a string, onto the stack.
    ilgen->Emit(OpCodes::Ldarg_0);
    // Call the overload of Console.WriteLine that prints a string.
    ilgen->EmitCall(OpCodes::Call, writeString, nullptr);
    // The Hello method returns the value of the second argument;
    // to do this, load the onto the stack and return.
    ilgen->Emit(OpCodes::Ldarg_1);
    ilgen->Emit(OpCodes::Ret);

    // Create a delegate that represents the dynamic method. This
    // action completes the method, and any further attempts to
    // change the method will cause an exception.
    HelloInvoker^ helloDelegate =
        (HelloInvoker^) hello->CreateDelegate(HelloInvoker::typeid);

    // Use the delegate to execute the dynamic method. Save and
    // print the return value.
    int returnValue = helloDelegate("\r\nHello, World!", 42);
    Console::WriteLine("helloDelegate(\"Hello, World!\", 42) returned {0}",
        returnValue);

    // Do it again, with different arguments.
    returnValue = helloDelegate("\r\nHi, Mom!", 5280);
    Console::WriteLine("helloDelegate(\"Hi, Mom!\", 5280) returned {0}",
        returnValue);

    // Create an array of arguments to use with the Invoke method.
    array<Object^>^ delegateArgs = {"\r\nHello, World!", 42};
    // Invoke the dynamic method using the arguments. This is much
    // slower than using the delegate, because you must create an
    // array to contain the arguments, and ValueType arguments
    // must be boxed.
    Object^ returnValueObject = hello->Invoke(nullptr, delegateArgs);
    Console::WriteLine("hello.Invoke returned {0}", returnValueObject);
}
using System;
using System.Reflection;
using System.Reflection.Emit;
using Microsoft.VisualBasic;

public class Test
{
    // Declare a delegate that will be used to execute the completed
    // dynamic method. 
    private delegate int HelloInvoker(string msg, int ret);

    public static void Main()
    {
        // Create an array that specifies the types of the parameters
        // of the dynamic method. This method has a string parameter
        // and an int parameter.
        Type[] helloArgs = {typeof(string), typeof(int)};

        // Create a dynamic method with the name "Hello", a return type
        // of int, and two parameters whose types are specified by the
        // array helloArgs. Create the method in the module that
        // defines the Test class.
        DynamicMethod hello = new DynamicMethod("Hello", 
            typeof(int), 
            helloArgs, 
            typeof(Test).Module);

        // Create an array that specifies the parameter types of the
        // overload of Console.WriteLine to be used in Hello.
        Type[] writeStringArgs = {typeof(string)};
        // Get the overload of Console.WriteLine that has one
        // String parameter.
        MethodInfo writeString = 
            typeof(Console).GetMethod("WriteLine", writeStringArgs);

        // Get an ILGenerator and emit a body for the dynamic method.
        ILGenerator il = hello.GetILGenerator();
        // Load the first argument, which is a string, onto the stack.
        il.Emit(OpCodes.Ldarg_0);
        // Call the overload of Console.WriteLine that prints a string.
        il.EmitCall(OpCodes.Call, writeString, null);
        // The Hello method returns the value of the second argument;
        // to do this, load the onto the stack and return.
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Ret);

        // Create a delegate that represents the dynamic method. This
        // action completes the method, and any further attempts to
        // change the method will cause an exception.
        HelloInvoker hi = 
            (HelloInvoker) hello.CreateDelegate(typeof(HelloInvoker));

        // Use the delegate to execute the dynamic method. Save and
        // print the return value.
        int retval = hi("\r\nHello, World!", 42);
        Console.WriteLine("Executing delegate hi(\"Hello, World!\", 42) returned {0}",
            retval);

        // Do it again, with different arguments.
        retval = hi("\r\nHi, Mom!", 5280);
        Console.WriteLine("Executing delegate hi(\"Hi, Mom!\", 5280) returned {0}",
            retval);
        
        // Create an array of arguments to use with the Invoke method.
        object[] invokeArgs = {"\r\nHello, World!", 42};
        // Invoke the dynamic method using the arguments. This is much
        // slower than using the delegate, because you must create an
        // array to contain the arguments, and ValueType arguments
        // must be boxed.
        object objRet = hello.Invoke(null, invokeArgs);
        Console.WriteLine("hello.Invoke returned {0}", objRet);
    }
}
Imports System.Reflection
Imports System.Reflection.Emit

Public Class Test
    ' Declare a delegate that will be used to execute the completed
    ' dynamic method. 
    Private Delegate Function HelloInvoker(ByVal msg As String, _
        ByVal ret As Integer) As Integer

    Public Shared Sub Main()
        ' Create an array that specifies the types of the parameters
        ' of the dynamic method. This method has a String parameter
        ' and an Integer parameter.
        Dim helloArgs() As Type = {GetType(String), GetType(Integer)}

        ' Create a dynamic method with the name "Hello", a return type
        ' of Integer, and two parameters whose types are specified by
        ' the array helloArgs. Create the method in the module that
        ' defines the Test class.
        Dim hello As New DynamicMethod("Hello", _
            GetType(Integer), _
            helloArgs, _
            GetType(Test).Module)

        ' Create an array that specifies the parameter types of the
        ' overload of Console.WriteLine to be used in Hello.
        Dim writeStringArgs() As Type = {GetType(String)}
        ' Get the overload of Console.WriteLine that has one
        ' String parameter.
        Dim writeString As MethodInfo = GetType(Console). _
            GetMethod("WriteLine", writeStringArgs) 

        ' Get an ILGenerator and emit a body for the dynamic method.
        Dim il As ILGenerator = hello.GetILGenerator()
        ' Load the first argument, which is a string, onto the stack.
        il.Emit(OpCodes.Ldarg_0)
        ' Call the overload of Console.WriteLine that prints a string.
        il.EmitCall(OpCodes.Call, writeString, Nothing)
        ' The Hello method returns the value of the second argument;
        ' to do this, load the onto the stack and return.
        il.Emit(OpCodes.Ldarg_1)
        il.Emit(OpCodes.Ret)

        ' Create a delegate that represents the dynamic method. This
        ' action completes the method, and any further attempts to
        ' change the method will cause an exception.
    Dim hi As HelloInvoker = _
            hello.CreateDelegate(GetType(HelloInvoker))

        ' Use the delegate to execute the dynamic method. Save and
        ' print the return value.
        Dim retval As Integer = hi(vbCrLf & "Hello, World!", 42)
        Console.WriteLine("Executing delegate hi(""Hello, World!"", 42) returned " _
            & retval)

        ' Do it again, with different arguments.
        retval = hi(vbCrLf & "Hi, Mom!", 5280)
        Console.WriteLine("Executing delegate hi(""Hi, Mom!"", 5280) returned " _
            & retval)

        ' Create an array of arguments to use with the Invoke method.
        Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
        ' Invoke the dynamic method using the arguments. This is much
        ' slower than using the delegate, because you must create an
        ' array to contain the arguments, and ValueType arguments
        ' must be boxed. Note that this overload of Invoke is 
        ' inherited from MethodBase, and simply calls the more 
        ' complete overload of Invoke.
        Dim objRet As Object = hello.Invoke(Nothing, invokeArgs)
        Console.WriteLine("hello.Invoke returned " & objRet)
    End Sub
End Class

' This code example produces the following output:
'
'Hello, World!
'Executing delegate hi("Hello, World!", 42) returned 42
'
'Hi, Mom!
'Executing delegate hi("Hi, Mom!", 5280) returned 5280
'
'Hello, World!
'hello.Invoke returned 42
'

Remarques

Ce constructeur spécifie des attributs de méthode MethodAttributes.Public et MethodAttributes.Static, la Convention d’appel CallingConventions.Standardet n’ignore pas les contrôles de visibilité juste-à-temps (JIT).This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, calling convention CallingConventions.Standard, and does not skip just-in-time (JIT) visibility checks.

La méthode dynamique créée avec ce constructeur a accès aux membres public et internal (Friend dans Visual Basic) de tous les types contenus dans le mde module.The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the types contained in module m.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : m est un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un module autre que le module appelant.to associate the dynamic method with a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

DynamicMethod(String, Type, Type[], Type)

Crée une méthode dynamique, en spécifiant le nom de la méthode, le type de retour, les types de paramètres et le type avec lequel la méthode dynamique est logiquement associée.Creates a dynamic method, specifying the method name, return type, parameter types, and the type with which the dynamic method is logically associated.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

Type avec lequel la méthode dynamique est logiquement associée.A Type with which the dynamic method is logically associated. La méthode dynamique a accès à tous les membres du type.The dynamic method has access to all members of the type.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- owner est une interface, un tableau, un type générique ouvert ou un paramètre de type d’un type générique ou d’une méthode.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name a la valeur null.name is null.

- ou --or- owner a la valeur null.owner is null.

returnType a la valeur null ou est un type pour lequel IsByRef renvoie true.returnType is null, or is a type for which IsByRef returns true.

Exemples

L’exemple de code suivant crée un DynamicMethod qui est associé logiquement à un type.The following code example creates a DynamicMethod that is logically associated with a type. Cette association lui donne accès aux membres privés de ce type.This association gives it access to the private members of that type.

L’exemple de code définit une classe nommée Example avec un champ privé, une classe nommée DerivedFromExample qui dérive de la première classe, un type délégué nommé UseLikeStatic qui retourne Int32 et a des paramètres de type Example et Int32, et un type délégué nommé UseLikeInstance qui retourne Int32 et qui a un paramètre de type Int32.The code example defines a class named Example with a private field, a class named DerivedFromExample that derives from the first class, a delegate type named UseLikeStatic that returns Int32 and has parameters of type Example and Int32, and a delegate type named UseLikeInstance that returns Int32 and has one parameter of type Int32.

L’exemple de code crée ensuite une DynamicMethod qui modifie le champ privé d’une instance de Example et retourne la valeur précédente.The example code then creates a DynamicMethod that changes the private field of an instance of Example and returns the previous value.

Notes

En général, la modification des champs internes des classes n’est pas une bonne pratique de codage orientée objet.In general, changing the internal fields of classes is not good object-oriented coding practice.

L’exemple de code crée une instance de Example, puis crée deux délégués.The example code creates an instance of Example and then creates two delegates. Le premier est de type UseLikeStatic, qui a les mêmes paramètres que la méthode dynamique.The first is of type UseLikeStatic, which has the same parameters as the dynamic method. Le deuxième est de type UseLikeInstance, qui ne possède pas le premier paramètre (de type Example).The second is of type UseLikeInstance, which lacks the first parameter (of type Example). Ce délégué est créé à l’aide de la surcharge de méthode CreateDelegate(Type, Object) ; le deuxième paramètre de cette surcharge de méthode est une instance de Example, dans le cas présent, l’instance qui vient d’être créée, qui est liée au délégué nouvellement créé.This delegate is created using the CreateDelegate(Type, Object) method overload; the second parameter of that method overload is an instance of Example, in this case the instance just created, which is bound to the newly created delegate. Chaque fois que ce délégué est appelé, la méthode dynamique agit sur l’instance liée de Example.Whenever that delegate is invoked, the dynamic method acts on the bound instance of Example.

Notes

Il s’agit d’un exemple des règles assouplies pour la liaison déléguée introduite dans le .NET Framework 2.0.NET Framework 2.0, ainsi que de nouvelles surcharges de la méthode Delegate.CreateDelegate.This is an example of the relaxed rules for delegate binding introduced in the .NET Framework 2.0.NET Framework 2.0, along with new overloads of the Delegate.CreateDelegate method. Pour plus d'informations, consultez la classe Delegate.For more information, see the Delegate class.

Le délégué UseLikeStatic est appelé, en passant l’instance de Example liée au délégué UseLikeInstance.The UseLikeStatic delegate is invoked, passing in the instance of Example that is bound to the UseLikeInstance delegate. Ensuite, le délégué UseLikeInstance est appelé, afin que les deux délégués agissent sur la même instance de Example.Then the UseLikeInstance delegate is invoked, so that both delegates act on the same instance of Example. Les modifications apportées aux valeurs du champ interne sont affichées après chaque appel.The changes in the values of the internal field are displayed after each call. Enfin, un délégué UseLikeInstance est lié à une instance de DerivedFromExample, et les appels de délégué sont répétés.Finally, a UseLikeInstance delegate is bound to an instance of DerivedFromExample, and the delegate calls are repeated.

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

// These classes are for demonstration purposes.
//
public class Example
{
    private int id = 0;
    public Example(int id)
    {
        this.id = id;
    }
    public int ID { get { return id; }}
}

public class DerivedFromExample : Example
{
    public DerivedFromExample(int id) : base(id) {} 
}

// Two delegates are declared: UseLikeInstance treats the dynamic
// method as if it were an instance method, and UseLikeStatic
// treats the dynamic method in the ordinary fashion.
// 
public delegate int UseLikeInstance(int newID);
public delegate int UseLikeStatic(Example ex, int newID);

public class Demo
{
    public static void Main()
    {
        // This dynamic method changes the private id field. It has
        // no name; it returns the old id value (return type int);
        // it takes two parameters, an instance of Example and 
        // an int that is the new value of id; and it is declared 
        // with Example as the owner type, so it can access all 
        // members, public and private.
        //
        DynamicMethod changeID = new DynamicMethod(
            "",
            typeof(int),
            new Type[] { typeof(Example), typeof(int) },
            typeof(Example)
        );

        // Get a FieldInfo for the private field 'id'.
        FieldInfo fid = typeof(Example).GetField(
            "id",
            BindingFlags.NonPublic | BindingFlags.Instance
        );
    
        ILGenerator ilg = changeID.GetILGenerator();

        // Push the current value of the id field onto the 
        // evaluation stack. It's an instance field, so load the
        // instance of Example before accessing the field.
        ilg.Emit(OpCodes.Ldarg_0);
        ilg.Emit(OpCodes.Ldfld, fid);

        // Load the instance of Example again, load the new value 
        // of id, and store the new field value. 
        ilg.Emit(OpCodes.Ldarg_0);
        ilg.Emit(OpCodes.Ldarg_1);
        ilg.Emit(OpCodes.Stfld, fid);

        // The original value of the id field is now the only 
        // thing on the stack, so return from the call.
        ilg.Emit(OpCodes.Ret);

        // Create a delegate that uses changeID in the ordinary
        // way, as a static method that takes an instance of
        // Example and an int.
        //
        UseLikeStatic uls = 
            (UseLikeStatic) changeID.CreateDelegate(
                typeof(UseLikeStatic)
            );

        // Create an instance of Example with an id of 42.
        //
        Example ex = new Example(42);

        // Create a delegate that is bound to the instance of 
        // of Example. This is possible because the first 
        // parameter of changeID is of type Example. The 
        // delegate has all the parameters of changeID except
        // the first.
        UseLikeInstance uli = 
            (UseLikeInstance) changeID.CreateDelegate(
                typeof(UseLikeInstance),
                ex
            );

        // First, change the value of id by calling changeID as
        // a static method, passing in the instance of Example.
        //
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uls(ex, 1492)
        );

        // Change the value of id again using the delegate bound
        // to the instance of Example.
        //
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uli(2700)
        );

        Console.WriteLine("Final value of id: {0}", ex.ID);

        // Now repeat the process with a class that derives
        // from Example.
        //
        DerivedFromExample dfex = new DerivedFromExample(71);

        uli = (UseLikeInstance) changeID.CreateDelegate(
                typeof(UseLikeInstance),
                dfex
            );

        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uls(dfex, 73)
        );
        Console.WriteLine(
            "Change the value of id; previous value: {0}",
            uli(79)
        );
        Console.WriteLine("Final value of id: {0}", dfex.ID);
    }
}

/* This code example produces the following output:

Change the value of id; previous value: 42
Change the value of id; previous value: 1492
Final value of id: 2700
Change the value of id; previous value: 71
Change the value of id; previous value: 73
Final value of id: 79
 */
Imports System.Reflection
Imports System.Reflection.Emit

' These classes are for demonstration purposes.
'
Public Class Example
    Private _id As Integer = 0
    
    Public Sub New(ByVal newId As Integer) 
        _id = newId    
    End Sub
    
    Public ReadOnly Property ID() As Integer 
        Get
            Return _id
        End Get
    End Property 
End Class

Public Class DerivedFromExample
    Inherits Example
    
    Public Sub New(ByVal newId As Integer) 
        MyBase.New(newId)
    End Sub
End Class
 
' Two delegates are declared: UseLikeInstance treats the dynamic
' method as if it were an instance method, and UseLikeStatic
' treats the dynamic method in the ordinary fashion.
' 
Public Delegate Function UseLikeInstance(ByVal newID As Integer) _
    As Integer 
Public Delegate Function UseLikeStatic(ByVal ex As Example, _
    ByVal newID As Integer) As Integer 

Public Class Demo
    
    Public Shared Sub Main() 
        ' This dynamic method changes the private _id field. It 
        ' has no name; it returns the old _id value (return type 
        ' Integer); it takes two parameters, an instance of Example 
        ' and an Integer that is the new value of _id; and it is 
        ' declared with Example as the owner type, so it can 
        ' access all members, public and private.
        '
        Dim changeID As New DynamicMethod( _
            "", _
            GetType(Integer), _
            New Type() {GetType(Example), GetType(Integer)}, _
            GetType(Example) _
        )
        
        ' Get a FieldInfo for the private field '_id'.
        Dim fid As FieldInfo = GetType(Example).GetField( _
            "_id", _
            BindingFlags.NonPublic Or BindingFlags.Instance _
        )
        
        Dim ilg As ILGenerator = changeID.GetILGenerator()
        
        ' Push the current value of the id field onto the 
        ' evaluation stack. It's an instance field, so load the
        ' instance of Example before accessing the field.
        ilg.Emit(OpCodes.Ldarg_0)
        ilg.Emit(OpCodes.Ldfld, fid)
        
        ' Load the instance of Example again, load the new value 
        ' of id, and store the new field value. 
        ilg.Emit(OpCodes.Ldarg_0)
        ilg.Emit(OpCodes.Ldarg_1)
        ilg.Emit(OpCodes.Stfld, fid)
        
        ' The original value of the id field is now the only 
        ' thing on the stack, so return from the call.
        ilg.Emit(OpCodes.Ret)
        
        
        ' Create a delegate that uses changeID in the ordinary
        ' way, as a static method that takes an instance of
        ' Example and an Integer.
        '
        Dim uls As UseLikeStatic = CType( _
            changeID.CreateDelegate(GetType(UseLikeStatic)), _
            UseLikeStatic _
        )
        
        ' Create an instance of Example with an id of 42.
        '
        Dim ex As New Example(42)
        
        ' Create a delegate that is bound to the instance of 
        ' of Example. This is possible because the first 
        ' parameter of changeID is of type Example. The 
        ' delegate has all the parameters of changeID except
        ' the first.
        Dim uli As UseLikeInstance = CType( _
            changeID.CreateDelegate( _
                GetType(UseLikeInstance), _
                ex), _
            UseLikeInstance _
        )
        
        ' First, change the value of _id by calling changeID as
        ' a static method, passing in the instance of Example.
        '
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uls(ex, 1492) _
        )
        
        ' Change the value of _id again using the delegate 
        ' bound to the instance of Example.
        '
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uli(2700) _
        )
        
        Console.WriteLine("Final value of _id: {0}", ex.ID)
    

        ' Now repeat the process with a class that derives
        ' from Example.
        '
        Dim dfex As New DerivedFromExample(71)

        uli = CType( _
            changeID.CreateDelegate( _
                GetType(UseLikeInstance), _
                dfex), _
            UseLikeInstance _
        )

        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uls(dfex, 73) _
        )
        Console.WriteLine( _
            "Change the value of _id; previous value: {0}", _
            uli(79) _
        )
        Console.WriteLine("Final value of _id: {0}", dfex.ID)

    End Sub
End Class

' This code example produces the following output:
'
'Change the value of _id; previous value: 42
'Change the value of _id; previous value: 1492
'Final value of _id: 2700
'Change the value of _id; previous value: 71
'Change the value of _id; previous value: 73
'Final value of _id: 79' 

Remarques

La méthode dynamique créée à l’aide de ce constructeur a accès à tous les membres du type owner, et aux membres publics et internal (Friend dans Visual Basic) de tous les autres types dans le module qui contient owner.The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the other types in the module that contains owner.

Ce constructeur spécifie des attributs de méthode MethodAttributes.Public et MethodAttributes.Static, la Convention d’appel CallingConventions.Standardet n’ignore pas les contrôles de visibilité juste-à-temps (JIT).This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, calling convention CallingConventions.Standard, and does not skip just-in-time (JIT) visibility checks.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : owner se trouve dans un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un type dans un module autre que le module appelant.to associate the dynamic method with a type in a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

DynamicMethod(String, Type, Type[], Module, Boolean)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, le type de retour, les types de paramètre, le module et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels a accès le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

Module représentant le module auquel la méthode dynamique doit être associée de manière logique.A Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean

true pour ignorer les contrôles de visibilité JIT sur les types et les membres auxquels a accès le langage MSIL de la méthode dynamique.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- m est un module qui fournit l’hébergement anonyme pour les méthodes dynamiques.m is a module that provides anonymous hosting for dynamic methods.

name a la valeur null.name is null.

- ou --or- m a la valeur null.m is null.

returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Remarques

Ce constructeur spécifie les attributs de méthode MethodAttributes.Public et MethodAttributes.Static, ainsi que la Convention d’appel CallingConventions.Standard.This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

La méthode dynamique créée à l’aide de ce constructeur a accès aux membres public et internal (Friend dans Visual Basic) de tous les types contenus dans mde modules contenus.The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the types in contained module m. Le fait d’ignorer les contrôles de visibilité du compilateur JIT permet à la méthode dynamique d’accéder également aux membres privés et protégés de tous les autres types.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Cela est utile, par exemple, lors de l’écriture de code pour sérialiser des objets.This is useful, for example, when writing code to serialize objects.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : m est un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un module autre que le module appelant.to associate the dynamic method with a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

DynamicMethod(String, Type, Type[], Type, Boolean)

Crée une méthode dynamique, en spécifiant le nom de la méthode, le type de retour, les types de paramètre, le type auquel la méthode dynamique est associée logiquement, et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method, specifying the method name, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
public DynamicMethod (string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

Type avec lequel la méthode dynamique est logiquement associée.A Type with which the dynamic method is logically associated. La méthode dynamique a accès à tous les membres du type.The dynamic method has access to all members of the type.

skipVisibility
Boolean

true pour ignorer les contrôles de visibilité JIT sur les types et membres auxquels a accès le langage MSIL de la méthode dynamique ; sinon, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- owner est une interface, un tableau, un type générique ouvert ou un paramètre de type d’un type générique ou d’une méthode.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name a la valeur null.name is null.

- ou --or- owner a la valeur null.owner is null.

returnType a la valeur null ou est un type pour lequel IsByRef renvoie true.returnType is null, or is a type for which IsByRef returns true.

Remarques

La méthode dynamique créée à l’aide de ce constructeur a accès à tous les membres du type owner, et aux membres publics et internal (Friend dans Visual Basic) de tous les autres types dans le module qui contient owner.The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the other types in the module that contains owner. Le fait d’ignorer les contrôles de visibilité du compilateur JIT permet à la méthode dynamique d’accéder également aux membres privés et protégés de tous les autres types.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Cela est utile, par exemple, lors de l’écriture de code pour sérialiser des objets.This is useful, for example, when writing code to serialize objects.

Ce constructeur spécifie les attributs de méthode MethodAttributes.Public et MethodAttributes.Static, ainsi que la Convention d’appel CallingConventions.Standard.This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : owner se trouve dans un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un type dans un module autre que le module appelant.to associate the dynamic method with a type in a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)

Crée une méthode dynamique qui est globale pour un module, en spécifiant le nom de la méthode, les attributs, les conventions d'appel, le type de retour, les types de paramètres, le module et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage Microsoft Intermediate Language (MSIL) de la méthode dynamique.Creates a dynamic method that is global to a module, specifying the method name, attributes, calling convention, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
public DynamicMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes

Combinaison de bits de valeurs MethodAttributes qui spécifie les attributs de la méthode dynamique.A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. La seule combinaison autorisée est Public et Static.The only combination allowed is Public and Static.

callingConvention
CallingConventions

Convention d’appel de la méthode dynamique.The calling convention for the dynamic method. Doit être Standard.Must be Standard.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

m
Module

Module représentant le module auquel la méthode dynamique doit être associée de manière logique.A Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean

true pour ignorer les contrôles de visibilité JIT sur les types et membres auxquels a accès le langage MSIL de la méthode dynamique ; sinon, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- m est un module qui fournit l’hébergement anonyme pour les méthodes dynamiques.m is a module that provides anonymous hosting for dynamic methods.

name a la valeur null.name is null.

- ou --or- m a la valeur null.m is null.

attributes est une combinaison d’indicateurs autre que Public et Static.attributes is a combination of flags other than Public and Static.

- ou --or- callingConvention n’est pas un Standard.callingConvention is not Standard.

- ou --or- returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Remarques

La méthode dynamique créée avec ce constructeur a accès aux membres public et internal (Friend dans Visual Basic) de tous les types publics et internes contenus dans le mde module.The dynamic method created with this constructor has access to public and internal (Friend in Visual Basic) members of all the public and internal types contained in module m.

Le fait d’ignorer les contrôles de visibilité du compilateur JIT permet à la méthode dynamique d’accéder aux membres privés et protégés de tous les autres types dans le module et dans tous les autres assemblys.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types in the module and in all other assemblies as well. Cela est utile, par exemple, lors de l’écriture de code pour sérialiser des objets.This is useful, for example, when writing code to serialize objects.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : m est un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: m is a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un module autre que le module appelant.to associate the dynamic method with a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)

Crée une méthode dynamique, en spécifiant le nom de la méthode, les attributs, la convention d’appel, le type de retour, les types de paramètre, le type auquel la méthode dynamique est associée logiquement, et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL (Microsoft Intermediate Language) de la méthode dynamique.Creates a dynamic method, specifying the method name, attributes, calling convention, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

public:
 DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
public DynamicMethod (string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)

Paramètres

name
String

Nom de la méthode dynamique.The name of the dynamic method. Il peut s’agir d’une chaîne de longueur nulle, mais pas de null.This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes

Combinaison de bits de valeurs MethodAttributes qui spécifie les attributs de la méthode dynamique.A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. La seule combinaison autorisée est Public et Static.The only combination allowed is Public and Static.

callingConvention
CallingConventions

Convention d’appel de la méthode dynamique.The calling convention for the dynamic method. Doit être Standard.Must be Standard.

returnType
Type

Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n’a aucun type de retour.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Tableau d’objets Type spécifiant les types des paramètres de la méthode dynamique, ou null si la méthode ne possède aucun paramètre.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

owner
Type

Type avec lequel la méthode dynamique est logiquement associée.A Type with which the dynamic method is logically associated. La méthode dynamique a accès à tous les membres du type.The dynamic method has access to all members of the type.

skipVisibility
Boolean

true pour ignorer les contrôles de visibilité JIT sur les types et membres auxquels a accès le langage MSIL de la méthode dynamique ; sinon, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Exceptions

Un élément de parameterTypes a la valeur null ou Void.An element of parameterTypes is null or Void.

- ou --or- owner est une interface, un tableau, un type générique ouvert ou un paramètre de type d’un type générique ou d’une méthode.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name a la valeur null.name is null.

- ou --or- owner a la valeur null.owner is null.

attributes est une combinaison d’indicateurs autre que Public et Static.attributes is a combination of flags other than Public and Static.

- ou --or- callingConvention n’est pas un Standard.callingConvention is not Standard.

- ou --or- returnType est un type pour lequel IsByRef retourne true.returnType is a type for which IsByRef returns true.

Remarques

La méthode dynamique est globale pour le module qui contient le type owner.The dynamic method is global to the module that contains the type owner. Il a accès à tous les membres du type owner.It has access to all members of the type owner.

La méthode dynamique créée à l’aide de ce constructeur a accès à tous les membres du type owner, et aux membres publics et internal (Friend dans Visual Basic) de tous les types contenus dans le module qui contient owner.The dynamic method created with this constructor has access to all members of the type owner, and to public and internal (Friend in Visual Basic) members of all the types contained in the module that contains owner. Le fait d’ignorer les contrôles de visibilité du compilateur JIT permet à la méthode dynamique d’accéder également aux membres privés et protégés de tous les autres types.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Cela est utile, par exemple, lors de l’écriture de code pour sérialiser des objets.This is useful, for example, when writing code to serialize objects.

Notes

Pour la compatibilité descendante, ce constructeur demande SecurityPermission avec l’indicateur SecurityPermissionFlag.ControlEvidence si les conditions suivantes sont vraies : owner se trouve dans un module autre que le module appelant, et la demande pour ReflectionPermission avec l’indicateur ReflectionPermissionFlag.MemberAccess a échoué.For backward compatibility, this constructor demands SecurityPermission with the SecurityPermissionFlag.ControlEvidence flag if the following conditions are both true: owner is in a module other than the calling module, and the demand for ReflectionPermission with the ReflectionPermissionFlag.MemberAccess flag has failed. Si la demande de SecurityPermission est réussie, l’opération est autorisée.If the demand for SecurityPermission succeeds, the operation is allowed.

Notes

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, ce membre ne requiert plus ReflectionPermission avec l’indicateur ReflectionPermissionFlag.ReflectionEmit.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (Voir problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler le .NET Framework 3.5.NET Framework 3.5 ou une version ultérieure.(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sécurité

ReflectionPermission
pour associer la méthode dynamique à un type dans un module autre que le module appelant.to associate the dynamic method with a type in a module other than the calling module. Énumération associée : RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Voir aussi

S’applique à