Поделиться через


DynamicMethod Класс

Определение

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить. Удаленные методы доступны для сборки мусора.

public ref class DynamicMethod sealed : System::Reflection::MethodInfo
public sealed class DynamicMethod : System.Reflection.MethodInfo
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DynamicMethod : System.Reflection.MethodInfo
type DynamicMethod = class
    inherit MethodInfo
[<System.Runtime.InteropServices.ComVisible(true)>]
type DynamicMethod = class
    inherit MethodInfo
Public NotInheritable Class DynamicMethod
Inherits MethodInfo
Наследование
Атрибуты

Примеры

В следующем примере кода создается динамический метод, который принимает два параметра. В примере создается простая функция, которая выводит первый параметр в консоль, а в примере используется второй параметр в качестве возвращаемого значения метода. В примере завершается метод путем создания делегата, вызывается делегат с другими параметрами и, наконец, вызывается динамический метод с помощью Invoke метода .

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

// Declare a delegate type that can be used to execute the completed
// dynamic method. 
private delegate int HelloDelegate(String^ msg, int ret);

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

    // 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 String class.
    DynamicMethod^ hello = gcnew DynamicMethod("Hello", 
        int::typeid, 
        helloArgs, 
        String::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,
    // using a stream size larger than the IL that will be
    // emitted.
    ILGenerator^ il = hello->GetILGenerator(256);
    // 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, nullptr);
    // 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);

    // Add parameter information to the dynamic method. (This is not
    // necessary, but can be useful for debugging.) For each parameter,
    // identified by position, supply the parameter attributes and a 
    // parameter name.
    hello->DefineParameter(1, ParameterAttributes::In, "message");
    hello->DefineParameter(2, ParameterAttributes::In, "valueToReturn");

    // Create a delegate that represents the dynamic method. This
    // action completes the method. Any further attempts to
    // change the method are ignored.
    HelloDelegate^ hi = 
        (HelloDelegate^) hello->CreateDelegate(HelloDelegate::typeid);

    // Use the delegate to execute the dynamic method.
    Console::WriteLine("\r\nUse the delegate to execute the dynamic method:");
    int retval = hi("\r\nHello, World!", 42);
    Console::WriteLine("Invoking delegate hi(\"Hello, World!\", 42) returned: " + retval);

    // Execute it again, with different arguments.
    retval = hi("\r\nHi, Mom!", 5280);
    Console::WriteLine("Invoking delegate hi(\"Hi, Mom!\", 5280) returned: " + retval);

    Console::WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
    // Create an array of arguments to use with the Invoke method.
    array<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 value-type arguments
    // must be boxed.
    Object^ objRet = hello->Invoke(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
    Console::WriteLine("hello.Invoke returned: " + objRet);

    Console::WriteLine("\r\n ----- Display information about the dynamic method -----");
    // Display MethodAttributes for the dynamic method, set when 
    // the dynamic method was created.
    Console::WriteLine("\r\nMethod Attributes: {0}", hello->Attributes);

    // Display the calling convention of the dynamic method, set when the 
    // dynamic method was created.
    Console::WriteLine("\r\nCalling convention: {0}", hello->CallingConvention);

    // Display the declaring type, which is always null for dynamic
    // methods.
    if (hello->DeclaringType == nullptr)
    {
        Console::WriteLine("\r\nDeclaringType is always null for dynamic methods.");
    }
    else
    {
        Console::WriteLine("DeclaringType: {0}", hello->DeclaringType);
    }

    // Display the default value for InitLocals.
    if (hello->InitLocals)
    {
        Console::Write("\r\nThis method contains verifiable code.");
    }
    else
    {
        Console::Write("\r\nThis method contains unverifiable code.");
    }
    Console::WriteLine(" (InitLocals = {0})", hello->InitLocals);

    // Display the module specified when the dynamic method was created.
    Console::WriteLine("\r\nModule: {0}", hello->Module);

    // Display the name specified when the dynamic method was created.
    // Note that the name can be blank.
    Console::WriteLine("\r\nName: {0}", hello->Name);

    // For dynamic methods, the reflected type is always null.
    if (hello->ReflectedType == nullptr)
    {
        Console::WriteLine("\r\nReflectedType is null.");
    }
    else
    {
        Console::WriteLine("\r\nReflectedType: {0}", hello->ReflectedType);
    }

    if (hello->ReturnParameter == nullptr)
    {
        Console::WriteLine("\r\nMethod has no return parameter.");
    }
    else
    {
        Console::WriteLine("\r\nReturn parameter: {0}", hello->ReturnParameter);
    }

    // If the method has no return type, ReturnType is System.Void.
    Console::WriteLine("\r\nReturn type: {0}", hello->ReturnType);

    // ReturnTypeCustomAttributes returns an ICustomeAttributeProvider
    // that can be used to enumerate the custom attributes of the
    // return value. At present, there is no way to set such custom
    // attributes, so the list is empty.
    if (hello->ReturnType == Void::typeid)
    {
        Console::WriteLine("The method has no return type.");
    }
    else
    {
        ICustomAttributeProvider^ caProvider = hello->ReturnTypeCustomAttributes;
        array<Object^>^ returnAttributes = caProvider->GetCustomAttributes(true);
        if (returnAttributes->Length == 0)
        {
            Console::WriteLine("\r\nThe return type has no custom attributes.");
        }
        else
        {
            Console::WriteLine("\r\nThe return type has the following custom attributes:");
            for each (Object^ attr in returnAttributes)
            {
                Console::WriteLine("\t{0}", attr->ToString());
            }
        }
    }

    Console::WriteLine("\r\nToString: {0}", hello->ToString());

    // Display parameter information.
    array<ParameterInfo^>^ parameters = hello->GetParameters();
    Console::WriteLine("\r\nParameters: name, type, ParameterAttributes");
    for each (ParameterInfo^ p in parameters)
    {
        Console::WriteLine("\t{0}, {1}, {2}", 
            p->Name, p->ParameterType, p->Attributes);
    }
}

/* This code example produces the following output:

Use the delegate to execute the dynamic method:

Hello, World!
Invoking delegate hi("Hello, World!", 42) returned: 42

Hi, Mom!
Invoking delegate hi("Hi, Mom!", 5280) returned: 5280

Use the Invoke method to execute the dynamic method:

Hello, World!
hello.Invoke returned: 42

 ----- Display information about the dynamic method -----

Method Attributes: PrivateScope, Public, Static

Calling convention: Standard

DeclaringType is always null for dynamic methods.

This method contains verifiable code. (InitLocals = True)

Module: CommonLanguageRuntimeLibrary

Name: Hello

ReflectedType is null.

Method has no return parameter.

Return type: System.Int32

The return type has no custom attributes.

ToString: Int32 Hello(System.String, Int32)

Parameters: name, type, ParameterAttributes
        message, System.String, In
        valueToReturn, System.Int32, In
 */
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Globalization;

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

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

        // 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 String class.
        DynamicMethod hello = new DynamicMethod("Hello",
            typeof(int),
            helloArgs,
            typeof(string).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,
        // using a stream size larger than the IL that will be
        // emitted.
        ILGenerator il = hello.GetILGenerator(256);
        // 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);

        // Add parameter information to the dynamic method. (This is not
        // necessary, but can be useful for debugging.) For each parameter,
        // identified by position, supply the parameter attributes and a
        // parameter name.
        hello.DefineParameter(1, ParameterAttributes.In, "message");
        hello.DefineParameter(2, ParameterAttributes.In, "valueToReturn");

        // Create a delegate that represents the dynamic method. This
        // action completes the method. Any further attempts to
        // change the method are ignored.
        HelloDelegate hi =
            (HelloDelegate) hello.CreateDelegate(typeof(HelloDelegate));

        // Use the delegate to execute the dynamic method.
        Console.WriteLine("\r\nUse the delegate to execute the dynamic method:");
        int retval = hi("\r\nHello, World!", 42);
        Console.WriteLine("Invoking delegate hi(\"Hello, World!\", 42) returned: " + retval);

        // Execute it again, with different arguments.
        retval = hi("\r\nHi, Mom!", 5280);
        Console.WriteLine("Invoking delegate hi(\"Hi, Mom!\", 5280) returned: " + retval);

        Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
        // 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 value-type arguments
        // must be boxed.
        object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
        Console.WriteLine("hello.Invoke returned: " + objRet);

        Console.WriteLine("\r\n ----- Display information about the dynamic method -----");
        // Display MethodAttributes for the dynamic method, set when
        // the dynamic method was created.
        Console.WriteLine("\r\nMethod Attributes: {0}", hello.Attributes);

        // Display the calling convention of the dynamic method, set when the
        // dynamic method was created.
        Console.WriteLine("\r\nCalling convention: {0}", hello.CallingConvention);

        // Display the declaring type, which is always null for dynamic
        // methods.
        if (hello.DeclaringType == null)
        {
            Console.WriteLine("\r\nDeclaringType is always null for dynamic methods.");
        }
        else
        {
            Console.WriteLine("DeclaringType: {0}", hello.DeclaringType);
        }

        // Display the default value for InitLocals.
        if (hello.InitLocals)
        {
            Console.Write("\r\nThis method contains verifiable code.");
        }
        else
        {
            Console.Write("\r\nThis method contains unverifiable code.");
        }
        Console.WriteLine(" (InitLocals = {0})", hello.InitLocals);

        // Display the module specified when the dynamic method was created.
        Console.WriteLine("\r\nModule: {0}", hello.Module);

        // Display the name specified when the dynamic method was created.
        // Note that the name can be blank.
        Console.WriteLine("\r\nName: {0}", hello.Name);

        // For dynamic methods, the reflected type is always null.
        if (hello.ReflectedType == null)
        {
            Console.WriteLine("\r\nReflectedType is null.");
        }
        else
        {
            Console.WriteLine("\r\nReflectedType: {0}", hello.ReflectedType);
        }

        if (hello.ReturnParameter == null)
        {
            Console.WriteLine("\r\nMethod has no return parameter.");
        }
        else
        {
            Console.WriteLine("\r\nReturn parameter: {0}", hello.ReturnParameter);
        }

        // If the method has no return type, ReturnType is System.Void.
        Console.WriteLine("\r\nReturn type: {0}", hello.ReturnType);

        // ReturnTypeCustomAttributes returns an ICustomeAttributeProvider
        // that can be used to enumerate the custom attributes of the
        // return value. At present, there is no way to set such custom
        // attributes, so the list is empty.
        if (hello.ReturnType == typeof(void))
        {
            Console.WriteLine("The method has no return type.");
        }
        else
        {
            ICustomAttributeProvider caProvider = hello.ReturnTypeCustomAttributes;
            object[] returnAttributes = caProvider.GetCustomAttributes(true);
            if (returnAttributes.Length == 0)
            {
                Console.WriteLine("\r\nThe return type has no custom attributes.");
            }
            else
            {
                Console.WriteLine("\r\nThe return type has the following custom attributes:");
                foreach( object attr in returnAttributes )
                {
                    Console.WriteLine("\t{0}", attr.ToString());
                }
            }
        }

        Console.WriteLine("\r\nToString: {0}", hello.ToString());

        // Display parameter information.
        ParameterInfo[] parameters = hello.GetParameters();
        Console.WriteLine("\r\nParameters: name, type, ParameterAttributes");
        foreach( ParameterInfo p in parameters )
        {
            Console.WriteLine("\t{0}, {1}, {2}",
                p.Name, p.ParameterType, p.Attributes);
        }
    }
}

/* This code example produces the following output:

Use the delegate to execute the dynamic method:

Hello, World!
Invoking delegate hi("Hello, World!", 42) returned: 42

Hi, Mom!
Invoking delegate hi("Hi, Mom!", 5280) returned: 5280

Use the Invoke method to execute the dynamic method:

Hello, World!
hello.Invoke returned: 42

 ----- Display information about the dynamic method -----

Method Attributes: PrivateScope, Public, Static

Calling convention: Standard

DeclaringType is always null for dynamic methods.

This method contains verifiable code. (InitLocals = True)

Module: CommonLanguageRuntimeLibrary

Name: Hello

ReflectedType is null.

Method has no return parameter.

Return type: System.Int32

The return type has no custom attributes.

ToString: Int32 Hello(System.String, Int32)

Parameters: name, type, ParameterAttributes
        message, System.String, In
        valueToReturn, System.Int32, In
 */
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Globalization

Public Class Test
    ' Declare a delegate type that can be used to execute the completed
    ' dynamic method. 
    Private Delegate Function HelloDelegate(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 dynamic 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 String class.
        Dim hello As New DynamicMethod("Hello", _
            GetType(Integer), _
            helloArgs, _
            GetType(String).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,
        ' using a stream size larger than the IL that will be
        ' emitted.
        Dim il As ILGenerator = hello.GetILGenerator(256)
        ' 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)

        ' Add parameter information to the dynamic method. (This is not
        ' necessary, but can be useful for debugging.) For each parameter,
        ' identified by position, supply the parameter attributes and a 
        ' parameter name.
        hello.DefineParameter(1, ParameterAttributes.In, "message")
        hello.DefineParameter(2, ParameterAttributes.In, "valueToReturn")

        ' Create a delegate that represents the dynamic method. This
        ' action completes the method. Any further attempts to
        ' change the method are ignored.
    Dim hi As HelloDelegate = _
            CType(hello.CreateDelegate(GetType(HelloDelegate)), HelloDelegate)

        ' Use the delegate to execute the dynamic method.
        Console.WriteLine(vbCrLf & "Use the delegate to execute the dynamic method:")
        Dim retval As Integer = hi(vbCrLf & "Hello, World!", 42)
        Console.WriteLine("Invoking delegate hi(""Hello, World!"", 42) returned: " _
            & retval & ".")

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

        Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
        ' 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 value-type arguments
        ' must be boxed.
        Dim objRet As Object = hello.Invoke(Nothing, _
            BindingFlags.ExactBinding, Nothing, invokeArgs, _
            New CultureInfo("en-us"))
        Console.WriteLine("hello.Invoke returned: {0}", objRet)

        Console.WriteLine(vbCrLf & _
            " ----- Display information about the dynamic method -----")
        ' Display MethodAttributes for the dynamic method, set when 
        ' the dynamic method was created.
        Console.WriteLine(vbCrLf & "Method Attributes: {0}", _
            hello.Attributes)

        ' Display the calling convention of the dynamic method, set when the 
        ' dynamic method was created.
        Console.WriteLine(vbCrLf & "Calling convention: {0}", _ 
            hello.CallingConvention)

        ' Display the declaring type, which is always Nothing for dynamic
        ' methods.
        If hello.DeclaringType Is Nothing Then
            Console.WriteLine(vbCrLf & "DeclaringType is always Nothing for dynamic methods.")
        Else
            Console.WriteLine("DeclaringType: {0}", hello.DeclaringType)
        End If

        ' Display the default value for InitLocals.
        If hello.InitLocals Then
            Console.Write(vbCrLf & "This method contains verifiable code.")
        Else
            Console.Write(vbCrLf & "This method contains unverifiable code.")
        End If
        Console.WriteLine(" (InitLocals = {0})", hello.InitLocals)

        ' Display the module specified when the dynamic method was created.
        Console.WriteLine(vbCrLf & "Module: {0}", hello.Module)

        ' Display the name specified when the dynamic method was created.
        ' Note that the name can be blank.
        Console.WriteLine(vbCrLf & "Name: {0}", hello.Name)

        ' For dynamic methods, the reflected type is always Nothing.
        If hello.ReflectedType Is Nothing Then
            Console.WriteLine(vbCrLf & "ReflectedType is Nothing.")
        Else
            Console.WriteLine(vbCrLf & "ReflectedType: {0}", _
                hello.ReflectedType)
        End If

        If hello.ReturnParameter Is Nothing Then
            Console.WriteLine(vbCrLf & "Method has no return parameter.")
        Else
            Console.WriteLine(vbCrLf & "Return parameter: {0}", _
                hello.ReturnParameter)
        End If

        ' If the method has no return type, ReturnType is System.Void.
        Console.WriteLine(vbCrLf & "Return type: {0}", hello.ReturnType)           

        ' ReturnTypeCustomAttributes returns an ICustomeAttributeProvider
        ' that can be used to enumerate the custom attributes of the
        ' return value. At present, there is no way to set such custom
        ' attributes, so the list is empty.
        If hello.ReturnType Is GetType(System.Void) Then
            Console.WriteLine("The method has no return type.")
        Else
            Dim caProvider As ICustomAttributeProvider = _
                hello.ReturnTypeCustomAttributes
            Dim returnAttributes() As Object = _
                caProvider.GetCustomAttributes(True)
            If returnAttributes.Length = 0 Then
                Console.WriteLine(vbCrLf _
                    & "The return type has no custom attributes.")
            Else
                Console.WriteLine(vbCrLf _
                    & "The return type has the following custom attributes:")
                For Each attr As Object In returnAttributes
                    Console.WriteLine(vbTab & attr.ToString())
                Next attr
            End If
        End If

        Console.WriteLine(vbCrLf & "ToString: " & hello.ToString())

        ' Display parameter information.
        Dim parameters() As ParameterInfo = hello.GetParameters()
        Console.WriteLine(vbCrLf & "Parameters: name, type, ParameterAttributes")
        For Each p As ParameterInfo In parameters
            Console.WriteLine(vbTab & "{0}, {1}, {2}", _ 
                p.Name, p.ParameterType, p.Attributes)
        Next p
    End Sub
End Class

' This code example produces the following output:
'
'Use the delegate to execute the dynamic method:
'
'Hello, World!
'Invoking delegate hi("Hello, World!", 42) returned: 42.
'
'Hi, Mom!
'Invoking delegate hi("Hi, Mom!", 5280) returned: 5280.
'
'Use the Invoke method to execute the dynamic method:
'
'Hello, World!
'hello.Invoke returned: 42
'
' ----- Display information about the dynamic method -----
'
'Method Attributes: PrivateScope, Public, Static
'
'Calling convention: Standard
'
'DeclaringType is always Nothing for dynamic methods.
'
'This method contains verifiable code. (InitLocals = True)
'
'Module: CommonLanguageRuntimeLibrary
'
'Name: Hello
'
'ReflectedType is Nothing.
'
'Method has no return parameter.
'
'Return type: System.Int32
'
'The return type has no custom attributes.
'
'ToString: Int32 Hello(System.String, Int32)
'
'Parameters: name, type, ParameterAttributes
'        message, System.String, In
'        valueToReturn, System.Int32, In

Комментарии

Дополнительные сведения об этом API см. в разделе Дополнительные примечания API для DynamicMethod.

Конструкторы

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

Создает динамический метод, который является глобальным для модуля, указывая имя метода, атрибуты, соглашение о вызовах, тип возвращаемого значения, типы параметров, модуль и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ промежуточный язык Майкрософт (MSIL) динамического метода.

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

Создает динамический метод, указывая имя метода, атрибуты, соглашение о вызовах, тип возвращаемого значения, типы параметров, тип, с которым логически связан динамический метод, и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ промежуточный язык Майкрософт (MSIL) динамического метода.

DynamicMethod(String, Type, Type[])

Инициализирует анонимно размещенный динамический метод, указывая имя метода, тип возвращаемого значения и типы параметров.

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

Инициализирует анонимно размещенный динамический метод, указывая имя метода, возвращаемый тип, типы параметров и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.

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

Создает динамический метод, который является глобальным по отношению к модулю, используя имя метода, тип возвращаемого значения, типы параметров и модуль.

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

Создает динамический метод, который является глобальным для модуля, указывая имя метода, тип возвращаемого значения, типы параметров, модуль и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.

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

Создает динамический метод, указывая имя метода, тип возвращаемого значения, типы параметров и тип, с которым логически связан динамический метод.

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

Создает динамический метод, указывая имя метода, тип возвращаемого значения, типы параметров, тип, с которым логически связан динамический метод, и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.

Свойства

Attributes

Возвращает атрибуты, указанные при создании динамического метода.

CallingConvention

Получает соглашение о вызовах, указанное при создании динамического метода.

ContainsGenericParameters

Получает значение, показывающее, содержит ли универсальный метод неназначенные параметры универсального типа.

(Унаследовано от MethodInfo)
CustomAttributes

Получает коллекцию, содержащую пользовательские атрибуты этого члена.

(Унаследовано от MemberInfo)
DeclaringType

Возвращает тип, который объявляет метод, всегда являющийся null для динамических методов.

InitLocals

Возвращает или задает значение, указывающее, инициализированы ли локальные переменные в методе нулевым значением.

IsAbstract

Возвращает значение, указывающее, является ли метод абстрактным.

(Унаследовано от MethodBase)
IsAssembly

Возвращает значение, которое указывает, описана ли доступность данного метода или конструктора в поле Assembly; другими словами, этот метод или конструктор полностью доступен для других полей той же сборки и недоступен для производных типов, не включенных в сборку.

(Унаследовано от MethodBase)
IsCollectible

Получает значение, указывающее, является ли объект MemberInfo частью сборки, содержащейся в забираемом контексте AssemblyLoadContext.

(Унаследовано от MemberInfo)
IsConstructedGenericMethod

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить. Удаленные методы доступны для сборки мусора.

(Унаследовано от MethodBase)
IsConstructor

Возвращает значение, указывающее, является ли метод конструктором.

(Унаследовано от MethodBase)
IsFamily

Возвращает значение, которое указывает, описана ли доступность этого метода или конструктора в поле Family; другими словами, этот метод или конструктор доступен только в своем классе и производных классах.

(Унаследовано от MethodBase)
IsFamilyAndAssembly

Возвращает значение, которое указывает, описана ли доступность этого метода или конструктора в поле FamANDAssem; другими словами, этот метод или конструктор может вызываться в производных классах, но только в том случае, если они находятся в той же сборке.

(Унаследовано от MethodBase)
IsFamilyOrAssembly

Возвращает значение, которое указывает, описана ли потенциальная доступность этого метода или конструктора в поле FamORAssem; другими словами, этот метод или конструктор может вызываться в производных классах независимо от их расположения, а также в классах той же сборки.

(Унаследовано от MethodBase)
IsFinal

Возвращает значение, указывающее, является ли метод final.

(Унаследовано от MethodBase)
IsGenericMethod

Возвращает значение, которое указывает, является ли текущий метод универсальным.

(Унаследовано от MethodInfo)
IsGenericMethodDefinition

Возвращает значение, указывающее, представляет ли текущий объект MethodInfo определение универсального метода.

(Унаследовано от MethodInfo)
IsHideBySig

Возвращает значение, указывающее, скрывается ли в производном классе только член такого же вида с точно такой же сигнатурой.

(Унаследовано от MethodBase)
IsPrivate

Возвращает значение, указывающее, является ли этот член закрытым.

(Унаследовано от MethodBase)
IsPublic

Возвращает значение, указывающее, является ли метод открытым.

(Унаследовано от MethodBase)
IsSecurityCritical

Получает значение, которое указывает, является ли текущий динамический метод критическим с точки зрения безопасности или надежным с точки зрения безопасности и, следовательно, может ли он выполнять важные операции.

IsSecurityCritical

Получает значение, которое указывает, является ли текущий метод или конструктор критически важным для безопасности или защищенным критически важным для безопасности на данном уровне доверия и, следовательно, может ли он выполнять критические операции.

(Унаследовано от MethodBase)
IsSecuritySafeCritical

Возвращает значение, которое указывает, является ли текущий динамический метод надежным с точки зрения безопасности на текущем уровне доверия и, следовательно, может ли он выполнять критически важные операции и предоставлять доступ прозрачному коду.

IsSecuritySafeCritical

Получает значение, которое указывает, является ли текущий динамический метод или конструктор защищенным критически важным для безопасности и, следовательно, может ли он выполнять критические операции и предоставлять доступ прозрачному коду.

(Унаследовано от MethodBase)
IsSecurityTransparent

Получает значение, которое указывает, является ли текущий динамический метод прозрачным на текущем уровне доверия и, следовательно, не может выполнять критические операции.

IsSecurityTransparent

Получает значение, которое указывает, является ли текущий метод или конструктор прозрачным на текущем уровне доверия и, следовательно, не может выполнять критические операции.

(Унаследовано от MethodBase)
IsSpecialName

Возвращает значение, указывающее, имеет ли этот метод специальное имя.

(Унаследовано от MethodBase)
IsStatic

Получает значение, указывающее, имеет ли метод значение static.

(Унаследовано от MethodBase)
IsVirtual

Получает значение, указывающее, имеет ли метод значение virtual.

(Унаследовано от MethodBase)
MemberType

Возвращает значение MemberTypes, указывающее, что этот элемент является методом.

(Унаследовано от MethodInfo)
MetadataToken

Получает значение, определяющее элемент метаданных.

(Унаследовано от MemberInfo)
MethodHandle

Не поддерживается для динамических методов.

MethodHandle

Возвращает дескриптор представления внутренних метаданных метода.

(Унаследовано от MethodBase)
MethodImplementationFlags

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить. Удаленные методы доступны для сборки мусора.

MethodImplementationFlags

Получает флаги MethodImplAttributes, указывающие атрибуты реализации методы.

(Унаследовано от MethodBase)
Module

Возвращает модуль, с которым логически связан динамический метод.

Module

Получает модуль, в котором определяется тип, объявляющий член, представленный текущим объектом MemberInfo.

(Унаследовано от MemberInfo)
Name

Получает имя динамического метода.

ReflectedType

Возвращает класс, который использовался в отражении для получения метода.

ReflectedType

Получает объект класса, который использовался для извлечения данного экземпляра объекта MemberInfo.

(Унаследовано от MemberInfo)
ReturnParameter

Возвращает выходной параметр динамического метода.

ReturnType

Получает тип возвращаемого значения для динамического метода.

ReturnTypeCustomAttributes

Получает настраиваемые атрибуты типа возвращаемого значения для динамического метода.

ReturnTypeCustomAttributes

Возвращает пользовательские атрибуты типа возвращаемого значения.

(Унаследовано от MethodInfo)

Методы

CreateDelegate(Type)

Завершает динамический метод и создает делегат, который может использоваться для его выполнения.

CreateDelegate(Type, Object)

Завершает динамический метод и создает делегат, который может использоваться для его выполнения, указывая тип делегата и объект, к которому привязан делегат.

CreateDelegate<T>()

Создает делегат типа T из этого метода.

(Унаследовано от MethodInfo)
CreateDelegate<T>(Object)

Создает делегат типа T с указанным целевым объектом из этого метода.

(Унаследовано от MethodInfo)
DefineParameter(Int32, ParameterAttributes, String)

Определяет параметр динамического метода.

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от MethodInfo)
GetBaseDefinition()

Возвращает базовую реализацию метода.

GetBaseDefinition()

Если переопределено в производном классе, возвращает объект MethodInfo для метода в прямом или косвенном базовом классе, в котором был первоначально объявлен метод, предоставляемый этим экземпляром.

(Унаследовано от MethodInfo)
GetCustomAttributes(Boolean)

Возвращает все настраиваемые атрибуты, определенные для метода.

GetCustomAttributes(Boolean)

При переопределении в производном классе возвращает массив всех настраиваемых атрибутов, примененных к данному члену.

(Унаследовано от MemberInfo)
GetCustomAttributes(Type, Boolean)

Возвращает настраиваемые атрибуты заданного типа, которые были применены к методу.

GetCustomAttributes(Type, Boolean)

При переопределении в производном классе возвращает массив настраиваемых атрибутов, применяемых к этому элементу и определяемых параметром Type.

(Унаследовано от MemberInfo)
GetCustomAttributesData()

Возвращает список объектов CustomAttributeData, представляющих данные об атрибутах, примененных к целевому элементу.

(Унаследовано от MemberInfo)
GetDynamicILInfo()

Возвращает объект DynamicILInfo, который может использоваться для создания тела метода из маркеров метаданных, областей и потоков промежуточного языка Майкрософт (MSIL).

GetGenericArguments()

Возвращает массив объектов Type, которые представляют аргументы универсального метода, относящиеся к типу, или параметры типа определения универсального метода.

(Унаследовано от MethodInfo)
GetGenericMethodDefinition()

Возвращает объект MethodInfo, представляющий определение универсального метода, на основе которого можно сконструировать текущий метод.

(Унаследовано от MethodInfo)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от MethodInfo)
GetILGenerator()

Возвращает генератор MSIL для этого метода с размером потока MSIL, по умолчанию равным 64 байтам.

GetILGenerator(Int32)

Возвращает генератор промежуточного языка Майкрософт (MSIL) для этого метода с указанным размером потока MSIL.

GetMethodBody()

При переопределении в производном классе возвращает объект MethodBody, который обеспечивает доступ к потоку MSIL, локальным переменным и исключениям для текущего метода.

(Унаследовано от MethodBase)
GetMethodImplementationFlags()

Возвращает флаги реализации для метода.

GetMethodImplementationFlags()

При переопределении в производном классе возвращает новые флаги MethodImplAttributes.

(Унаследовано от MethodBase)
GetParameters()

Возвращает параметры динамического метода.

GetType()

Выявляет атрибуты метода и обеспечивает доступ к его метаданным.

(Унаследовано от MethodInfo)
HasSameMetadataDefinitionAs(MemberInfo)

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить. Удаленные методы доступны для сборки мусора.

(Унаследовано от MemberInfo)
Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)

Вызывает динамический метод, используя указанные параметры и учитывая ограничения заданного модуля привязки и указанные сведения о языке и региональных параметрах.

Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)

При переопределении в производном классе вызывает отражаемый метод или конструктор с заданными параметрами.

(Унаследовано от MethodBase)
Invoke(Object, Object[])

Вызывает метод или конструктор, представленный текущим экземпляром, используя указанные параметры.

(Унаследовано от MethodInfo)
IsDefined(Type, Boolean)

Указывает, определен ли заданный тип настраиваемых атрибутов.

IsDefined(Type, Boolean)

При переопределении в производном классе указывает, применяются ли для этого члена один или несколько атрибутов заданного типа или его производных типов.

(Унаследовано от MemberInfo)
MakeGenericMethod(Type[])

Заменяет параметры типа элементами массива типов для определения текущего универсального метода и возвращает объект MethodInfo, представляющий итоговый сконструированный метод.

(Унаследовано от MethodInfo)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает сигнатуру метода, представленную в виде строки.

Явные реализации интерфейса

_MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от MemberInfo)
_MemberInfo.GetType()

Возвращает объект Type, представляющий класс MemberInfo.

(Унаследовано от MemberInfo)
_MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.

(Унаследовано от MemberInfo)
_MemberInfo.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от MemberInfo)
_MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от MemberInfo)
_MethodBase.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от MethodBase)
_MethodBase.GetType()

Описание этого члена см. в разделе GetType().

(Унаследовано от MethodBase)
_MethodBase.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.

(Унаследовано от MethodBase)
_MethodBase.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от MethodBase)
_MethodBase.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от MethodBase)
_MethodBase.IsAbstract

Описание этого члена см. в разделе IsAbstract.

(Унаследовано от MethodBase)
_MethodBase.IsAssembly

Описание этого члена см. в разделе IsAssembly.

(Унаследовано от MethodBase)
_MethodBase.IsConstructor

Описание этого члена см. в разделе IsConstructor.

(Унаследовано от MethodBase)
_MethodBase.IsFamily

Описание этого члена см. в разделе IsFamily.

(Унаследовано от MethodBase)
_MethodBase.IsFamilyAndAssembly

Описание этого члена см. в разделе IsFamilyAndAssembly.

(Унаследовано от MethodBase)
_MethodBase.IsFamilyOrAssembly

Описание этого члена см. в разделе IsFamilyOrAssembly.

(Унаследовано от MethodBase)
_MethodBase.IsFinal

Описание этого члена см. в разделе IsFinal.

(Унаследовано от MethodBase)
_MethodBase.IsHideBySig

Описание этого члена см. в разделе IsHideBySig.

(Унаследовано от MethodBase)
_MethodBase.IsPrivate

Описание этого члена см. в разделе IsPrivate.

(Унаследовано от MethodBase)
_MethodBase.IsPublic

Описание этого члена см. в разделе IsPublic.

(Унаследовано от MethodBase)
_MethodBase.IsSpecialName

Описание этого члена см. в разделе IsSpecialName.

(Унаследовано от MethodBase)
_MethodBase.IsStatic

Описание этого члена см. в разделе IsStatic.

(Унаследовано от MethodBase)
_MethodBase.IsVirtual

Описание этого члена см. в разделе IsVirtual.

(Унаследовано от MethodBase)
_MethodInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от MethodInfo)
_MethodInfo.GetType()

Предоставляет доступ к методу GetType() из COM-объекта.

(Унаследовано от MethodInfo)
_MethodInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от MethodInfo)
_MethodInfo.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от MethodInfo)
_MethodInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от MethodInfo)
ICustomAttributeProvider.GetCustomAttributes(Boolean)

Возвращает массив всех настраиваемых атрибутов, определенных для этого элемента, за исключением именованных атрибутов, или пустой массив, если атрибуты отсутствуют.

(Унаследовано от MemberInfo)
ICustomAttributeProvider.GetCustomAttributes(Type, Boolean)

Возвращает массив настраиваемых атрибутов, определенных для этого элемента с учетом типа, или пустой массив, если отсутствуют настраиваемые атрибуты определенного типа.

(Унаследовано от MemberInfo)
ICustomAttributeProvider.IsDefined(Type, Boolean)

Указывает, сколько экземпляров attributeType определено для этого элемента.

(Унаследовано от MemberInfo)

Методы расширения

GetCustomAttribute(MemberInfo, Type)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.

GetCustomAttribute(MemberInfo, Type, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttribute<T>(MemberInfo)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.

GetCustomAttribute<T>(MemberInfo, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes(MemberInfo)

Извлекает коллекцию настраиваемых атрибутов, примененных к указанному члену.

GetCustomAttributes(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов, которые применяются к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes(MemberInfo, Type)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.

GetCustomAttributes(MemberInfo, Type, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes<T>(MemberInfo)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.

GetCustomAttributes<T>(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

IsDefined(MemberInfo, Type)

Указывает, применены ли какие-либо пользовательские атрибуты заданного типа к указанному члену.

IsDefined(MemberInfo, Type, Boolean)

Указывает применены ли настраиваемые атрибуты указанного типа к указанному элементу и, при необходимости, применены ли они к его предкам.

GetMetadataToken(MemberInfo)

Возвращает маркер метаданных для заданного элемента, если он доступен.

HasMetadataToken(MemberInfo)

Возвращает значение, указывающее, доступен ли маркер метаданных для указанного элемента.

GetBaseDefinition(MethodInfo)

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить. Удаленные методы доступны для сборки мусора.

GetRuntimeBaseDefinition(MethodInfo)

Извлекает объект, представляющий указанный метода в прямом или косвенном базовом классе, где он был первоначально объявлен.

Применяется к

См. также раздел