DynamicMethod DynamicMethod DynamicMethod DynamicMethod Constructors

Definizione

Overload

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

Inizializza un metodo dinamico ospitato anonimamente, specificando il nome del metodo, il tipo restituito e i tipi di parametro.Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

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

Inizializza un metodo dinamico ospitato anonimamente, specificando il nome del metodo, il tipo restituito, i tipi di parametro e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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) DynamicMethod(String, Type, Type[], Module) DynamicMethod(String, Type, Type[], Module) DynamicMethod(String, Type, Type[], Module)

Crea un metodo dinamico che è globale per un modulo, specificando il nome del metodo, il tipo restituito, i tipi di parametro e il modulo.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) DynamicMethod(String, Type, Type[], Type) DynamicMethod(String, Type, Type[], Type) DynamicMethod(String, Type, Type[], Type)

Crea un metodo dinamico, specificando il nome del metodo, il tipo restituito, i parametri di tipo e il tipo a cui il metodo dinamico è associato dal punto di vista logico.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) DynamicMethod(String, Type, Type[], Module, Boolean) DynamicMethod(String, Type, Type[], Module, Boolean) DynamicMethod(String, Type, Type[], Module, Boolean)

Crea un metodo dinamico globale per un modulo, specificando il nome del metodo, il tipo restituito, i tipi di parametri e il modulo e indicando se deve essere ignorato il controllo di visibilità JIT per i tipi e i membri del metodo dinamico a cui accede MSIL (Microsoft Intermediate Language).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) DynamicMethod(String, Type, Type[], Type, Boolean) DynamicMethod(String, Type, Type[], Type, Boolean) DynamicMethod(String, Type, Type[], Type, Boolean)

Crea un metodo dinamico, specificando il nome del metodo, il tipo restituito, i tipi di parametro, il tipo a cui il metodo dinamico è associato in modo logico e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)

Crea un metodo dinamico globale per un metodo, specificando il nome del metodo, gli attributi, la convenzione di chiamata, il tipo restituito, i tipi di parametro, il modulo e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean) DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)

Crea un metodo dinamico, specificando il nome del metodo, gli attributi, la convenzione di chiamata, il tipo restituito, i tipi di parametro, il tipo a cui il metodo dinamico è associato in modo logico e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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[]) DynamicMethod(String, Type, Type[]) DynamicMethod(String, Type, Type[]) DynamicMethod(String, Type, Type[])

Inizializza un metodo dinamico ospitato anonimamente, specificando il nome del metodo, il tipo restituito e i tipi di parametro.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())

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.An array of Type objects specifying the types of the parameters of the dynamic method, or null if the method has no parameters.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Commenti

Il metodo dinamico che viene creato da questo costruttore è associato a un assembly anonimo anziché un tipo esistente o un modulo.The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. L'assembly anonimo esiste solo per fornire un ambiente sandbox per i metodi dinamici, vale a dire, per isolarli da altro codice.The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. Questo ambiente rende sicuro per il metodo dinamico a essere generato ed eseguito dal codice parzialmente attendibile.This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

Questo costruttore viene specificato che just-in-time (JIT) i controlli di visibilità saranno imposte per Microsoft intermedio language (MSIL) del metodo dinamico.This constructor specifies that just-in-time (JIT) visibility checks will be enforced for the Microsoft intermediate language (MSIL) of the dynamic method. Vale a dire, il codice del metodo dinamico ha accesso ai metodi pubblici delle classi pubbliche.That is, the code in the dynamic method has access to public methods of public classes. Le eccezioni vengono generate se il metodo tenta di accedere a tipi o membri che sono private, protected, o internal (Friend in Visual Basic).Exceptions are thrown if the method tries to access types or members that are private, protected, or internal (Friend in Visual Basic). Per creare un metodo dinamico con possibilità di ignorare i controlli di visibilità JIT limitate, usare il DynamicMethod(String, Type, Type[], Boolean) costruttore.To create a dynamic method that has restricted ability to skip JIT visibility checks, use the DynamicMethod(String, Type, Type[], Boolean) constructor.

Quando viene creato un metodo dinamico ospitato anonimamente, lo stack di chiamate di concessioni dell'assembly è incluso.When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. Quando viene richiamato il metodo, le autorizzazioni di concessioni dell'assembly sono utilizzate invece le autorizzazioni del chiamante effettivo.When the method is invoked, the permissions of the emitting assembly are used instead of the permissions of the actual caller. Di conseguenza, non è possibile eseguire il metodo dinamico a un livello di privilegi superiore rispetto a quello dell'assembly che ha generato, anche se viene passato a ed eseguita da un assembly con un livello di attendibilità superiore.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.

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Statice la convenzione di chiamata CallingConventions.Standard.This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

Nota

Questo costruttore è stato introdotto nel .NET Framework 3.5.NET Framework 3.5 o versione successiva.This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

Vedi anche

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

Inizializza un metodo dinamico ospitato anonimamente, specificando il nome del metodo, il tipo restituito, i tipi di parametro e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Boolean Boolean Boolean

true per ignorare i controlli di visibilità JIT sui tipi e i membri a cui accede il linguaggio MSIL del metodo dinamico, con questa restrizione: il livello di attendibilità degli assembly che contengono questi tipi e membri deve essere uguale o minore di quello dello stack di chiamata che genera il metodo dinamico; in caso contrario, 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.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Commenti

Il metodo dinamico che viene creato da questo costruttore è associato a un assembly anonimo anziché un tipo esistente o un modulo.The dynamic method that is created by this constructor is associated with an anonymous assembly instead of an existing type or module. L'assembly anonimo esiste solo per fornire un ambiente sandbox per i metodi dinamici, vale a dire, per isolarli da altro codice.The anonymous assembly exists only to provide a sandbox environment for dynamic methods, that is, to isolate them from other code. Questo ambiente rende sicuro per il metodo dinamico a essere generato ed eseguito dal codice parzialmente attendibile.This environment makes it safe for the dynamic method to be emitted and executed by partially trusted code.

Metodi dinamici ospitati anonimamente non hanno accesso automatico a tutti i tipi o membri che corrispondono private, protected, o internal (Friend in 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). Questo è diverso da metodi dinamici associati a un tipo esistente o un modulo, che dispongono dell'accesso ai membri nascosti nel proprio ambito associato.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.

Specificare true per restrictedSkipVisibility se il metodo dinamico deve accedere a tipi o membri che vengono private, protected, o internal.Specify true for restrictedSkipVisibility if your dynamic method has to access types or members that are private, protected, or internal. In questo modo il metodo dinamico limitato l'accesso a questi membri.This gives the dynamic method restricted access to these members. Vale a dire, i membri sono accessibili solo se vengono soddisfatte le condizioni seguenti:That is, the members can be accessed only if the following conditions are met:

  • I membri di destinazione appartengono a un assembly con un livello di attendibilità uguale o minore di stack di chiamate che genera il metodo dinamico.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.

  • Lo stack di chiamate che genera il metodo dinamico viene concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag.The call stack that emits the dynamic method is granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag. Ciò vale sempre quando viene eseguito il codice con attendibilità totale.This is always true when the code is executed with full trust. Per codice parzialmente attendibile, è vero solo se l'host concede in modo esplicito l'autorizzazione.For partially trusted code, it is true only if the host explicitly grants the permission.

    Importante

    Se non è stato concesso l'autorizzazione, viene generata un'eccezione di sicurezza quando CreateDelegate viene chiamato o quando viene richiamato il metodo dinamico, non quando viene chiamato questo costruttore.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. Non speciali sono necessarie autorizzazioni per generare il metodo dinamico.No special permissions are required to emit the dynamic method.

Ad esempio, un metodo dinamico che viene creato con restrictedSkipVisibility impostato su true può accedere a un membro privato di qualsiasi assembly nello stack di chiamate se lo stack di chiamate è stato concesso l'accesso limitato al membro.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. Se il metodo dinamico viene creato con codice parzialmente attendibile nello stack di chiamate, non è possibile accedere a un membro privato di un tipo in un .NET Framework.NET Framework assembly, poiché tali assembly sono completamente attendibili.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.

Se restrictedSkipVisibility è false, vengono applicati i controlli di visibilità JIT.If restrictedSkipVisibility is false, JIT visibility checks are enforced. Il codice del metodo dinamico ha accesso ai metodi pubblici delle classi pubbliche e le eccezioni vengono generate se tenta di accedere a tipi o membri che sono private, protected, o 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.

Quando viene creato un metodo dinamico ospitato anonimamente, lo stack di chiamate di concessioni dell'assembly è incluso.When an anonymously hosted dynamic method is constructed, the call stack of the emitting assembly is included. Quando viene richiamato il metodo, le autorizzazioni dello stack di chiamate emissione sono utilizzate invece le autorizzazioni del chiamante effettivo.When the method is invoked, the permissions of the emitting call stack are used instead of the permissions of the actual caller. Di conseguenza, non è possibile eseguire il metodo dinamico a un livello di privilegi superiore rispetto a quello dell'assembly che ha generato, anche se viene passato a ed eseguita da un assembly con un livello di attendibilità superiore.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.

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Statice la convenzione di chiamata CallingConventions.Standard.This constructor specifies the method attributes MethodAttributes.Public and MethodAttributes.Static, and the calling convention CallingConventions.Standard.

Nota

Questo costruttore è stato introdotto nel .NET Framework 3.5.NET Framework 3.5 o versione successiva.This constructor was introduced in the .NET Framework 3.5.NET Framework 3.5 or later.

Vedi anche

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

Crea un metodo dinamico che è globale per un modulo, specificando il nome del metodo, il tipo restituito, i tipi di parametro e il modulo.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Module Module

Oggetto Module che rappresenta il modulo a cui il metodo dinamico deve essere associato in modo logico.A Module representing the module with which the dynamic method is to be logically associated.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- m è un modulo che fornisce hosting anonimo per i metodi dinamici.m is a module that provides anonymous hosting for dynamic methods.

name è null.name is null.

oppure-or- m è null.m is null.

returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Esempi

Esempio di codice seguente crea un metodo dinamico che accetta due parametri.The following code example creates a dynamic method that takes two parameters. L'esempio emette il corpo di una funzione semplice che stampa il primo parametro nella console e l'esempio Usa il secondo parametro come valore restituito del metodo.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. Nell'esempio viene completato il metodo tramite la creazione di un delegato, richiama il delegato con parametri diversi e infine viene chiamato il metodo dinamico usando il Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) (metodo).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
Imports System.Reflection
Imports System.Reflection.Emit
Imports Microsoft.VisualBasic

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
'

Commenti

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Static, la convenzione di chiamata CallingConventions.Standarde non ignora i controlli di visibilità just-in-time (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.

Il metodo dinamico creato con questo costruttore può accedere a public e internal (Friend in Visual Basic) membri di tutti i tipi di contenuto nel modulo m.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.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: m è un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un modulo diverso dal modulo chiamante.to associate the dynamic method with a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

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

Crea un metodo dinamico, specificando il nome del metodo, il tipo restituito, i parametri di tipo e il tipo a cui il metodo dinamico è associato dal punto di vista logico.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Type Type

Oggetto Type a cui il metodo dinamico è associato in modo logico.A Type with which the dynamic method is logically associated. Il metodo dinamico ha accesso a tutti i membri del tipo.The dynamic method has access to all members of the type.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- owner è un'interfaccia, una matrice, un tipo generico aperto o un parametro di tipo di un tipo o un metodo generico.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name è null.name is null.

oppure-or- owner è null.owner is null.

returnType è null o è un tipo per cui IsByRef restituisce true.returnType is null, or is a type for which IsByRef returns true.

Esempi

L'esempio di codice seguente crea un DynamicMethod associato in modo logico con un tipo.The following code example creates a DynamicMethod that is logically associated with a type. Questa associazione fornisce l'accesso ai membri privati di quel tipo.This association gives it access to the private members of that type.

L'esempio di codice definisce una classe denominata Example con un campo privato, una classe denominata DerivedFromxample che deriva dalla classe di primo, un tipo delegato denominato UseLikeStatic che restituisce Int32 contenente i parametri di tipo Example eInt32e un tipo delegato denominato UseLikeInstance che restituisce Int32 e ha un parametro di tipo Int32.The code example defines a class named Example with a private field, a class named DerivedFromxample 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.

Il codice di esempio crea quindi una DynamicMethod che modifica il campo privato di un'istanza di Example e restituisce il valore precedente.The example code then creates a DynamicMethod that changes the private field of an instance of Example and returns the previous value.

Nota

In generale, modificando i campi interni di classi non buona procedura di codifica basato sugli oggetti.In general, changing the internal fields of classes is not good object-oriented coding practice.

Il codice di esempio crea un'istanza di Example e quindi crea due delegati.The example code creates an instance of Example and then creates two delegates. Il primo è di tipo UseLikeStatic, che ha gli stessi parametri del metodo dinamico.The first is of type UseLikeStatic, which has the same parameters as the dynamic method. Il secondo JE typu UseLikeInstance, che non è presente il primo parametro (di tipo Example).The second is of type UseLikeInstance, which lacks the first parameter (of type Example). Questo delegato viene creato utilizzando il CreateDelegate(Type, Object) overload del metodo; il secondo parametro di tale overload del metodo è un'istanza di Example, in questo caso l'istanza appena creato, che è associato al delegato appena creato.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. Ogni volta che il delegato viene richiamato, il metodo dinamico agisce sull'istanza associata di Example.Whenever that delegate is invoked, the dynamic method acts on the bound instance of Example.

Nota

Questo è un esempio delle regole di tipo "relaxed" per associazione di delegati introdotte nel .NET Framework 2.0.NET Framework 2.0, insieme ai nuovi overload del Delegate.CreateDelegate (metodo).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. Per altre informazioni, vedere la classe Delegate.For more information, see the Delegate class.

Il UseLikeStatic delegato viene richiamato, passando l'istanza del Example associato ai UseLikeInstance delegare.The UseLikeStatic delegate is invoked, passing in the instance of Example that is bound to the UseLikeInstance delegate. L'oggetto UseLikeInstance delegato viene richiamato, in modo che entrambi i delegati agiscono sulla stessa istanza di Example.Then the UseLikeInstance delegate is invoked, so that both delegates act on the same instance of Example. Le modifiche nei valori del campo interno vengono visualizzate dopo ogni chiamata.The changes in the values of the internal field are displayed after each call. Infine, un UseLikeInstance delegato è associato a un'istanza di DerivedFromxample, e vengono ripetute di chiamate al delegato.Finally, a UseLikeInstance delegate is bound to an instance of DerivedFromxample, 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
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' 

Commenti

Il metodo dinamico creato con questo costruttore può accedere a tutti i membri del tipo ownere su pubblico e internal (Friend in Visual Basic) membri di tutti gli altri tipi nel modulo che contiene 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.

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Static, la convenzione di chiamata CallingConventions.Standarde non ignora i controlli di visibilità just-in-time (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.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: owner di un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un tipo in un modulo diverso dal modulo chiamante.to associate the dynamic method with a type in a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

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

Crea un metodo dinamico globale per un modulo, specificando il nome del metodo, il tipo restituito, i tipi di parametri e il modulo e indicando se deve essere ignorato il controllo di visibilità JIT per i tipi e i membri del metodo dinamico a cui accede MSIL (Microsoft Intermediate Language).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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Module Module

Oggetto Module che rappresenta il modulo a cui il metodo dinamico deve essere associato in modo logico.A Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean Boolean Boolean Boolean

true per ignorare i controlli di visibilità JIT su tipi e membri a cui accede il linguaggio MSIL del metodo dinamico.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- m è un modulo che fornisce hosting anonimo per i metodi dinamici.m is a module that provides anonymous hosting for dynamic methods.

name è null.name is null.

oppure-or- m è null.m is null.

returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Commenti

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Statice la convenzione di chiamata CallingConventions.Standard.This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

Il metodo dinamico creato con questo costruttore può accedere a public e internal (Friend in Visual Basic) membri di tutti i tipi contenuti nel modulo m.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. Controlli di visibilità del compilatore verrà ignorato il compilatore JIT consente il metodo dinamico accedere ai membri privati e protetti anche tutti gli altri tipi.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Ciò è utile, ad esempio, quando si scrive codice per serializzare oggetti.This is useful, for example, when writing code to serialize objects.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: m è un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un modulo diverso dal modulo chiamante.to associate the dynamic method with a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

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

Crea un metodo dinamico, specificando il nome del metodo, il tipo restituito, i tipi di parametro, il tipo a cui il metodo dinamico è associato in modo logico e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Type Type

Oggetto Type a cui il metodo dinamico è associato in modo logico.A Type with which the dynamic method is logically associated. Il metodo dinamico ha accesso a tutti i membri del tipo.The dynamic method has access to all members of the type.

skipVisibility
Boolean Boolean Boolean Boolean

true per ignorare i controlli di visibilità JIT sui tipi e i membri cui accede il linguaggio MSIL del metodo dinamico; in caso contrario, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- owner è un'interfaccia, una matrice, un tipo generico aperto o un parametro di tipo di un tipo o un metodo generico.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name è null.name is null.

oppure-or- owner è null.owner is null.

returnType è null o è un tipo per cui IsByRef restituisce true.returnType is null, or is a type for which IsByRef returns true.

Commenti

Il metodo dinamico creato con questo costruttore può accedere a tutti i membri del tipo ownere su pubblico e internal (Friend in Visual Basic) membri di tutti gli altri tipi nel modulo che contiene 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. Controlli di visibilità del compilatore verrà ignorato il compilatore JIT consente il metodo dinamico accedere ai membri privati e protetti anche tutti gli altri tipi.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Ciò è utile, ad esempio, quando si scrive codice per serializzare oggetti.This is useful, for example, when writing code to serialize objects.

Questo costruttore consente di specificare gli attributi del metodo MethodAttributes.Public e MethodAttributes.Statice la convenzione di chiamata CallingConventions.Standard.This constructor specifies method attributes MethodAttributes.Public and MethodAttributes.Static, and calling convention CallingConventions.Standard.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: owner di un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un tipo in un modulo diverso dal modulo chiamante.to associate the dynamic method with a type in a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

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

Crea un metodo dinamico globale per un metodo, specificando il nome del metodo, gli attributi, la convenzione di chiamata, il tipo restituito, i tipi di parametro, il modulo e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes MethodAttributes MethodAttributes MethodAttributes

Combinazione bit per bit di valori di MethodAttributes che specifica gli attributi del metodo dinamico.A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. L'unica combinazione consentita è Public e Static.The only combination allowed is Public and Static.

callingConvention
CallingConventions CallingConventions CallingConventions CallingConventions

Convenzione di chiamata per il metodo dinamico.The calling convention for the dynamic method. Deve essere Standard.Must be Standard.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Module Module

Oggetto Module che rappresenta il modulo a cui il metodo dinamico deve essere associato in modo logico.A Module representing the module with which the dynamic method is to be logically associated.

skipVisibility
Boolean Boolean Boolean Boolean

true per ignorare i controlli di visibilità JIT sui tipi e i membri cui accede il linguaggio MSIL del metodo dinamico; in caso contrario, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- m è un modulo che fornisce hosting anonimo per i metodi dinamici.m is a module that provides anonymous hosting for dynamic methods.

name è null.name is null.

oppure-or- m è null.m is null.

attributes è una combinazione di flag diversa da Public e Static.attributes is a combination of flags other than Public and Static.

oppure-or- callingConvention non è Standard.callingConvention is not Standard.

oppure-or- returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Commenti

Il metodo dinamico creato con questo costruttore può accedere a public e internal (Friend in Visual Basic) membri di tutti i tipi pubblici e interni contenuti nel modulo m.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.

Controlli di visibilità del compilatore verrà ignorato il compilatore JIT consente il metodo dinamico accedere ai membri privati e protetti tutti gli altri tipi nel modulo e in tutti gli altri assembly.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. Ciò è utile, ad esempio, quando si scrive codice per serializzare oggetti.This is useful, for example, when writing code to serialize objects.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: m è un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un modulo diverso dal modulo chiamante.to associate the dynamic method with a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

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

Crea un metodo dinamico, specificando il nome del metodo, gli attributi, la convenzione di chiamata, il tipo restituito, i tipi di parametro, il tipo a cui il metodo dinamico è associato in modo logico e se i controlli di visibilità JIT possono essere ignorati per i tipi e i membri cui accede il linguaggio MSIL (Microsoft Intermediate Language) del metodo dinamico.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)

Parametri

name
String String String String

Nome del metodo dinamico.The name of the dynamic method. Può essere una stringa di lunghezza zero, ma non può essere null.This can be a zero-length string, but it cannot be null.

attributes
MethodAttributes MethodAttributes MethodAttributes MethodAttributes

Combinazione bit per bit di valori di MethodAttributes che specifica gli attributi del metodo dinamico.A bitwise combination of MethodAttributes values that specifies the attributes of the dynamic method. L'unica combinazione consentita è Public e Static.The only combination allowed is Public and Static.

callingConvention
CallingConventions CallingConventions CallingConventions CallingConventions

Convenzione di chiamata per il metodo dinamico.The calling convention for the dynamic method. Deve essere Standard.Must be Standard.

returnType
Type Type Type Type

Oggetto Type che specifica il tipo restituito del metodo dinamico oppure null se per il metodo non esiste alcun tipo restituito.A Type object that specifies the return type of the dynamic method, or null if the method has no return type.

parameterTypes
Type[]

Matrice di oggetti Type che specifica i tipi dei parametri del metodo dinamico oppure null se per il metodo non esistono parametri.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 Type Type

Oggetto Type a cui il metodo dinamico è associato in modo logico.A Type with which the dynamic method is logically associated. Il metodo dinamico ha accesso a tutti i membri del tipo.The dynamic method has access to all members of the type.

skipVisibility
Boolean Boolean Boolean Boolean

true per ignorare i controlli di visibilità JIT sui tipi e i membri cui accede il linguaggio MSIL del metodo dinamico; in caso contrario, false.true to skip JIT visibility checks on types and members accessed by the MSIL of the dynamic method; otherwise, false.

Eccezioni

Un elemento di parameterTypes è null o Void.An element of parameterTypes is null or Void.

oppure-or- owner è un'interfaccia, una matrice, un tipo generico aperto o un parametro di tipo di un tipo o un metodo generico.owner is an interface, an array, an open generic type, or a type parameter of a generic type or method.

name è null.name is null.

oppure-or- owner è null.owner is null.

attributes è una combinazione di flag diversa da Public e Static.attributes is a combination of flags other than Public and Static.

oppure-or- callingConvention non è Standard.callingConvention is not Standard.

oppure-or- returnType è un tipo per cui IsByRef restituisce true.returnType is a type for which IsByRef returns true.

Commenti

Il metodo dinamico è globale per il modulo che contiene il tipo owner.The dynamic method is global to the module that contains the type owner. Dispone dell'accesso a tutti i membri del tipo owner.It has access to all members of the type owner.

Il metodo dinamico creato con questo costruttore può accedere a tutti i membri del tipo ownere su pubblico e internal (Friend in Visual Basic) membri di tutti i tipi inclusi nel modulo che contiene 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. Controlli di visibilità del compilatore verrà ignorato il compilatore JIT consente il metodo dinamico accedere ai membri privati e protetti anche tutti gli altri tipi.Skipping the JIT compiler's visibility checks allows the dynamic method to access private and protected members of all other types as well. Ciò è utile, ad esempio, quando si scrive codice per serializzare oggetti.This is useful, for example, when writing code to serialize objects.

Nota

Per garantire la compatibilità con le versioni precedenti, questo costruttore richiede SecurityPermission con il SecurityPermissionFlag.ControlEvidence flag se le condizioni seguenti sono entrambe true: owner di un modulo ad eccezione del modulo chiamante e la domanda del ReflectionPermission con il ReflectionPermissionFlag.MemberAccess flag non è riuscita.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. Se la richiesta di SecurityPermission ha esito positivo, l'operazione è consentita.If the demand for SecurityPermission succeeds, the operation is allowed.

Nota

Inizia con la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, questo membro non è più necessario ReflectionPermission con il ReflectionPermissionFlag.ReflectionEmit flag.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. (Vedere problemi di sicurezza nella Reflection Emit.) Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.(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.

Sicurezza

ReflectionPermission
Per associare il metodo dinamico a un tipo in un modulo diverso dal modulo chiamante.to associate the dynamic method with a type in a module other than the calling module. Enumerazione associata: RestrictedMemberAccess.Associated enumeration: RestrictedMemberAccess.

Vedi anche

Si applica a