DynamicMethod Konstruktory

Definice

Vytvoří dynamickou metodu.

Přetížení

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

Inicializuje anonymně hostované dynamické metody, určuje název metody, návratový typ a typy parametrů.

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

Inicializuje anonymně hostovanou dynamickou metodu, zadá název metody, návratový typ, typy parametrů a zda by měly být kontroly viditelnosti za běhu (JIT) vynechány pro typy a členy, ke které přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

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

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, návratový typ, typy parametrů a modul.

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

Vytvoří dynamickou metodu, určuje název metody, návratový typ, typy parametrů a typ, se kterým je dynamická metoda logicky přidružena.

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

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, návratový typ, typy parametrů, modul a zda by měly být kontroly viditelnosti za běhu (JIT) vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

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

Vytvoří dynamickou metodu, určí název metody, návratový typ, typy parametrů, typ, se kterým je dynamická metoda logicky přidružená, a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

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

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, atributy, konvenci volání, návratový typ, typy parametrů, modul a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

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

Vytvoří dynamickou metodu, určí název metody, atributy, konvenci volání, návratový typ, typy parametrů, typ, se kterým je dynamická metoda logicky přidružená, a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

DynamicMethod(String, Type, Type[])

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Inicializuje anonymně hostované dynamické metody, určuje název metody, návratový typ a typy parametrů.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type())

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

name je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Poznámky

Dynamická metoda vytvořená tímto konstruktorem je přidružena k anonymnímu sestavení namísto existujícího typu nebo modulu. Anonymní sestavení existuje pouze pro poskytnutí prostředí sandboxu pro dynamické metody, to znamená, že je izoluje od jiného kódu. Toto prostředí zajišťuje bezpečné generování a spouštění dynamické metody částečně důvěryhodným kódem.

Tento konstruktor určuje, že kontroly viditelnosti za běhu (JIT) budou vynuceny pro Microsoft zprostředkující jazyk (MSIL) dynamické metody. To znamená, že kód v dynamické metodě má přístup k veřejným metodám veřejných tříd. Výjimky jsou vyvolány, pokud se metoda pokusí o přístup k typům nebo členům, které jsou private, protected nebo internal (Friend v Visual Basic). Chcete-li vytvořit dynamickou metodu, která má omezenou schopnost přeskočit kontroly viditelnosti JIT, použijte DynamicMethod(String, Type, Type[], Boolean) konstruktor.

Je-li vytvořena anonymní hostovaná dynamická metoda, je zahrnut zásobník volání vygenerující sestavení. Při vyvolání metody se místo oprávnění skutečného volajícího použijí oprávnění emitujícího sestavení. Dynamická metoda tedy nemůže provést na vyšší úrovni oprávnění než sestavení, které ho vygenerovalo, i když je předána a spuštěna sestavením, které má vyšší úroveň důvěryhodnosti.

Tento konstruktor určuje atributy MethodAttributes.Public a MethodAttributes.Static metody a konvenci volání CallingConventions.Standard.

Note

Tento konstruktor byl představen v .NET Framework 3.5 nebo novější.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Inicializuje anonymně hostovanou dynamickou metodu, zadá název metody, návratový typ, typy parametrů a zda by měly být kontroly viditelnosti za běhu (JIT) vynechány pro typy a členy, ke které přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, bool restrictedSkipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * bool -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

restrictedSkipVisibility
Boolean

truepokud chcete přeskočit kontroly viditelnosti JIT u typů a členů, ke kterým přistupuje knihovna MSIL dynamické metody, s tímto omezením: úroveň důvěryhodnosti sestavení, která obsahují tyto typy a členy, musí být rovna nebo menší než úroveň důvěryhodnosti zásobníku volání, která generuje dynamickou metodu; v opačném případě . false

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

name je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Poznámky

Dynamická metoda vytvořená tímto konstruktorem je přidružena k anonymnímu sestavení namísto existujícího typu nebo modulu. Anonymní sestavení existuje pouze pro poskytnutí prostředí sandboxu pro dynamické metody, to znamená, že je izoluje od jiného kódu. Toto prostředí zajišťuje bezpečné generování a spouštění dynamické metody částečně důvěryhodným kódem.

Anonymní hostované dynamické metody nemají automatický přístup k žádným typům nebo členům, které jsou private, protected nebo internal (Friend v Visual Basic). To se liší od dynamických metod přidružených k existujícímu typu nebo modulu, které mají přístup ke skrytým členům v jejich přidruženém oboru.

Zadejte true , restrictedSkipVisibility zda má dynamická metoda přístup k typům nebo členům, které jsou private, protectednebo internal. To dává dynamické metodě omezený přístup k těmto členům. To znamená, že k členům lze přistupovat pouze v případě splnění následujících podmínek:

  • Cílové členy patří do sestavení, které má úroveň důvěryhodnosti rovna nebo nižší než zásobník volání, který generuje dynamickou metodu.

  • Zásobník volání, který generuje dynamickou metodu, je udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess . Toto platí vždy, když je kód spuštěn s úplnou důvěrou. Pro částečně důvěryhodný kód platí pouze v případě, že hostitel explicitně udělí oprávnění.

    Important

    Pokud oprávnění nebylo uděleno, je vyvolána výjimka zabezpečení při CreateDelegate zavolání nebo při vyvolání dynamické metody, ne při zavolání tohoto konstruktoru. K vygenerování dynamické metody nejsou nutná žádná zvláštní oprávnění.

Například dynamická metoda vytvořená se restrictedSkipVisibility sadou pro přístup k true privátnímu členu libovolného sestavení v zásobníku volání, pokud byl zásobník volání udělen omezený přístup člena. Pokud je dynamická metoda vytvořena s částečně důvěryhodným kódem v zásobníku volání, nemůže získat přístup k privátnímu členu typu v sestavení .NET Framework, protože taková sestavení jsou plně důvěryhodná.

Pokud restrictedSkipVisibility je false, vynucují se kontroly viditelnosti JIT. Kód v dynamické metodě má přístup k veřejným metodám veřejných tříd a výjimky jsou vyvolány, pokud se pokusí o přístup k typům nebo členům, které jsou private, protectednebo internal.

Je-li vytvořena anonymní hostovaná dynamická metoda, je zahrnut zásobník volání vygenerující sestavení. Při vyvolání metody se místo oprávnění skutečného volajícího použijí oprávnění vygenerujícího zásobníku volání. Dynamická metoda tedy nemůže provést na vyšší úrovni oprávnění než sestavení, které ho vygenerovalo, i když je předána a spuštěna sestavením, které má vyšší úroveň důvěryhodnosti.

Tento konstruktor určuje atributy MethodAttributes.Public a MethodAttributes.Static metody a konvenci volání CallingConventions.Standard.

Note

Tento konstruktor byl představen v .NET Framework 3.5 nebo novější.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, návratový typ, typy parametrů a modul.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

m
Module

Představuje Module modul, ke kterému má být dynamická metoda logicky přidružena.

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

m je modul, který poskytuje anonymní hostování dynamických metod.

name je null.

nebo

m je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Příklady

Následující příklad kódu vytvoří dynamickou metodu, která přebírá dva parametry. Příklad vygeneruje jednoduchý text funkce, který vytiskne první parametr do konzoly a v příkladu se jako návratová hodnota metody použije druhý parametr. Příklad dokončí metodu vytvořením delegáta, vyvolá delegáta s různými parametry a nakonec vyvolá dynamickou metodu Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) .

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
'

Poznámky

Tento konstruktor určuje atributy MethodAttributes.Public metody a MethodAttributes.Static, volání konvence CallingConventions.Standarda nepřekočuje kontroly viditelnosti za běhu (JIT).

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup k veřejným a internal (Friend z jazyka Visual Basic) členům všech typů obsažených v modulu m.

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud jsou splněny následující podmínky: m je jiný modul než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, určuje název metody, návratový typ, typy parametrů a typ, se kterým je dynamická metoda logicky přidružena.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, Type owner);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

owner
Type

A Type , se kterou je dynamická metoda logicky přidružena. Dynamická metoda má přístup ke všem členům typu.

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

owner je rozhraní, pole, otevřený obecný typ nebo parametr typu obecného typu nebo metody.

name je null.

nebo

owner je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Příklady

Následující příklad kódu vytvoří DynamicMethod , který je logicky přidružen k typu. Toto přidružení mu dává přístup k soukromým členům tohoto typu.

Příklad kódu definuje třídu pojmenovanou Example s privátním polem, třídu DerivedFromExample, která je odvozena od první třídy, typ delegáta UseLikeStatic, který vrací Int32 a má parametry typu Example a Int32, a typ delegáta s názvem UseLikeInstance, který vrací Int32 a má jeden parametr typu Int32.

Ukázkový kód pak vytvoří DynamicMethod , který změní privátní pole instance instance Example a vrátí předchozí hodnotu.

Note

Obecně platí, že změna vnitřních polí tříd není dobrým objektově orientovaným kódovacím postupem.

Ukázkový kód vytvoří instanci Example a pak vytvoří dva delegáty. První je typu UseLikeStatic, který má stejné parametry jako dynamická metoda. Druhá je typu UseLikeInstance, která neobsahuje první parametr (typu Example). Tento delegát je vytvořen pomocí CreateDelegate(Type, Object) přetížení metody; druhý parametr tohoto přetížení metody je instance Example, v tomto případě právě vytvořená instance, která je vázána na nově vytvořený delegát. Při každém vyvolání delegáta dynamická metoda působí na vázané instanci Example.

Note

Toto je příklad uvolněných pravidel pro vázání delegátů zavedených v rozhraní .NET Framework 2.0 spolu s novými přetíženími metody Delegate.CreateDelegate. Další informace najdete ve třídě Delegate.

Delegát UseLikeStatic je vyvolán a předává instanci Example , která je vázána na delegáta UseLikeInstance . Poté je vyvolán delegát UseLikeInstance, aby oba delegáti pracovaly na stejné instanci Example. Změny v hodnotách interního pole se zobrazí po každém volání. UseLikeInstance Nakonec je delegát vázán na instanci DerivedFromExamplea volání delegáta se opakují.

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'

Poznámky

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup ke všem členům typu owner a k veřejným členům a internal (Friend v jazyce Visual Basic) všech ostatních typů v modulu, který obsahuje owner.

Tento konstruktor určuje atributy MethodAttributes.Public metody a MethodAttributes.Static, volání konvence CallingConventions.Standarda nepřekočuje kontroly viditelnosti za běhu (JIT).

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud platí obě následující podmínky: owner je v jiném modulu než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, návratový typ, typy parametrů, modul a zda by měly být kontroly viditelnosti za běhu (JIT) vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

m
Module

Představuje Module modul, ke kterému má být dynamická metoda logicky přidružena.

skipVisibility
Boolean

true pro přeskočení kontrol viditelnosti JIT u typů a členů přístupných jazykem MSIL dynamické metody.

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

m je modul, který poskytuje anonymní hostování dynamických metod.

name je null.

nebo

m je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Poznámky

Tento konstruktor určuje atributy MethodAttributes.Public metody a MethodAttributes.Statica volání konvence CallingConventions.Standard.

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup k veřejným a internal (Friend v Visual Basic) všech typů obsažených v modulu m. Přeskočení kontrol viditelnosti kompilátoru JIT umožňuje dynamické metodě přístup k privátním a chráněným členům všech ostatních typů. To je užitečné například při psaní kódu pro serializaci objektů.

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud jsou splněny následující podmínky: m je jiný modul než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, určí název metody, návratový typ, typy parametrů, typ, se kterým je dynamická metoda logicky přidružená, a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

public:
 DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

owner
Type

A Type , se kterou je dynamická metoda logicky přidružena. Dynamická metoda má přístup ke všem členům typu.

skipVisibility
Boolean

truepřeskočit kontroly viditelnosti JIT u typů a členů, ke které přistupuje knihovna MSIL dynamické metody; v opačném případě . false

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

owner je rozhraní, pole, otevřený obecný typ nebo parametr typu obecného typu nebo metody.

name je null.

nebo

owner je null.

.NET Framework a verze .NET Core starší než 2.1: returnType je typ, pro který IsByRef vrátí true.

Poznámky

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup ke všem členům typu owner a k veřejným členům a internal (Friend v jazyce Visual Basic) všech ostatních typů v modulu, který obsahuje owner. Přeskočení kontrol viditelnosti kompilátoru JIT umožňuje dynamické metodě přístup k privátním a chráněným členům všech ostatních typů. To je užitečné například při psaní kódu pro serializaci objektů.

Tento konstruktor určuje atributy MethodAttributes.Public metody a MethodAttributes.Statica volání konvence CallingConventions.Standard.

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud platí obě následující podmínky: owner je v jiném modulu než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, která je globální pro modul, určuje název metody, atributy, konvenci volání, návratový typ, typy parametrů, modul a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, 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);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

attributes
MethodAttributes

Bitové kombinace MethodAttributes hodnot, které určují atributy dynamické metody. Jediná povolená kombinace je Public a Static.

callingConvention
CallingConventions

Konvence volání pro dynamickou metodu. Musí být Standard.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

m
Module

Představuje Module modul, ke kterému má být dynamická metoda logicky přidružena.

skipVisibility
Boolean

truepřeskočit kontroly viditelnosti JIT u typů a členů, ke které přistupuje knihovna MSIL dynamické metody; v opačném případě . false

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

m je modul, který poskytuje anonymní hostování dynamických metod.

name je null.

nebo

m je null.

attributes je kombinace jiných příznaků než Public a Static.

nebo

callingConvention není Standard.

nebo

returnType je typ, pro který IsByRef se vrátí true.

Poznámky

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup k veřejným a internal (Friend v Visual Basic) členů všech veřejných a interních typů obsažených v modulu m.

Přeskočení kontrol viditelnosti kompilátoru JIT umožňuje dynamické metodě přistupovat k soukromým a chráněným členům všech ostatních typů v modulu i ve všech ostatních sestaveních. To je užitečné například při psaní kódu pro serializaci objektů.

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud jsou splněny následující podmínky: m je jiný modul než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro

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

Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs
Zdroj:
DynamicMethod.cs

Vytvoří dynamickou metodu, určí název metody, atributy, konvenci volání, návratový typ, typy parametrů, typ, se kterým je dynamická metoda logicky přidružená, a zda kontroly viditelnosti za běhu (JIT) by měly být vynechány pro typy a členy, ke kterým přistupuje Microsoft zprostředkující jazyk (MSIL) dynamické metody.

public:
 DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, 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);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
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)

Parametry

name
String

Název dynamické metody. Může to být řetězec nulové délky, ale nemůže to být null.

attributes
MethodAttributes

Bitové kombinace MethodAttributes hodnot, které určují atributy dynamické metody. Jediná povolená kombinace je Public a Static.

callingConvention
CallingConventions

Konvence volání pro dynamickou metodu. Musí být Standard.

returnType
Type

Type Objekt, který určuje návratový typ dynamické metody, nebo null pokud metoda nemá žádný návratový typ.

parameterTypes
Type[]

Pole Type objektů určujících typy parametrů dynamické metody, nebo null pokud metoda nemá žádné parametry.

owner
Type

A Type , se kterou je dynamická metoda logicky přidružena. Dynamická metoda má přístup ke všem členům typu.

skipVisibility
Boolean

truepřeskočit kontroly viditelnosti JIT u typů a členů, ke které přistupuje knihovna MSIL dynamické metody; v opačném případě . false

Atributy

Výjimky

parameterTypes Prvek je null nebo Void.

nebo

owner je rozhraní, pole, otevřený obecný typ nebo parametr typu obecného typu nebo metody.

name je null.

nebo

owner je null.

attributes je kombinace jiných příznaků než Public a Static.

nebo

callingConvention není Standard.

nebo

returnType je typ, pro který IsByRef se vrátí true.

Poznámky

Dynamická metoda je globální pro modul, který obsahuje typ owner. Má přístup ke všem členům typu owner.

Dynamická metoda vytvořená pomocí tohoto konstruktoru má přístup ke všem členům typu owner a k veřejným a internal (Friend v Visual Basic) všech typů obsažených v modulu, který obsahuje owner. Přeskočení kontrol viditelnosti kompilátoru JIT umožňuje dynamické metodě přístup k privátním a chráněným členům všech ostatních typů. To je užitečné například při psaní kódu pro serializaci objektů.

Note

Kvůli zpětné kompatibilitě tento konstruktor vyžaduje SecurityPermission s příznakem SecurityPermissionFlag.ControlEvidence, pokud platí obě následující podmínky: owner je v jiném modulu než volající modul a požadavek na ReflectionPermission s příznakem ReflectionPermissionFlag.MemberAccess selhal. Pokud je poptávka úspěšná SecurityPermission , je operace povolená.

Viz také

Platí pro