DynamicMethod Класс

Определение

Определяет и представляет динамический метод, который можно скомпилировать, выполнить и удалить.Defines and represents a dynamic method that can be compiled, executed, and discarded. Удаленные методы доступны для сборки мусора.Discarded methods are available for garbage collection.

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
Наследование
Атрибуты

Примеры

В следующем примере кода создается динамический метод, принимающий два параметра.The following code example creates a dynamic method that takes two parameters. В этом примере создается простой текст функции, который выводит первый параметр на консоль, а в примере используется второй параметр в качестве возвращаемого значения метода.The example emits a simple function body that prints the first parameter to the console, and the example uses the second parameter as the return value of the method. В примере метод завершается путем создания делегата, вызывает делегат с другими параметрами и, наконец, вызывает динамический метод с помощью Invoke метода.The example completes the method by creating a delegate, invokes the delegate with different parameters, and finally invokes the dynamic method using the Invoke method.

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

Комментарии

Класс можно использовать DynamicMethod для создания и выполнения метода во время выполнения без создания динамической сборки и динамического типа для хранения метода.You can use the DynamicMethod class to generate and execute a method at run time, without having to generate a dynamic assembly and a dynamic type to contain the method. Исполняемый код, созданный JIT-компилятором, освобождается при DynamicMethod освобождении объекта.The executable code created by the just-in-time (JIT) compiler is reclaimed when the DynamicMethod object is reclaimed. Динамические методы — это наиболее эффективный способ создания и выполнения небольших объемов кода.Dynamic methods are the most efficient way to generate and execute small amounts of code.

Динамический метод может быть размещен анонимно или логически связан с модулем или с типом.A dynamic method can be anonymously hosted, or it can be logically associated with a module or with a type.

  • Если динамический метод размещен анонимно, он размещается в предоставляемой системой сборке и, следовательно, изолирован от другого кода.If the dynamic method is anonymously hosted, it is located in a system-provided assembly, and therefore is isolated from other code. По умолчанию он не имеет доступа к данным, которые не являются общедоступными.By default, it does not have access to any non-public data. Анонимно размещенный динамический метод может иметь ограниченную возможность пропускать проверки видимости JIT-компилятора, если он был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом.An anonymously hosted dynamic method can have restricted ability to skip the JIT compiler's visibility checks, if it has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag. Уровень доверия к сборке, к неоткрытым членам которых обращаются динамические методы, должен быть равен или подмножеству уровня доверия стека вызовов, который выдал динамический метод.The trust level of the assembly whose non-public members are accessed by the dynamic method must be equal to, or a subset of, the trust level of the call stack that emitted the dynamic method. Дополнительные сведения о анонимно размещенных динамических методах см. в разделе Пошаговое руководство. эмиссия кода в сценариях с частичным доверием.For more information about anonymously hosted dynamic methods, see Walkthrough: Emitting Code in Partial Trust Scenarios.

  • Если динамический метод связан с указанным модулем, динамический метод является фактически глобальным для этого модуля.If the dynamic method is associated with a module that you specify, the dynamic method is effectively global to that module. Он может получить доступ ко всем типам в модуле, а также ко всем internal ( Friend в Visual Basic) членам типов.It can access all types in the module and all internal (Friend in Visual Basic) members of the types. Динамический метод можно связать с любым модулем независимо от того, был ли он создан, при условии, что требование ReflectionPermission с RestrictedMemberAccess флагом может быть удовлетворено стеком вызовов, включающим ваш код.You can associate a dynamic method with any module, regardless of whether you created the module, provided that a demand for ReflectionPermission with the RestrictedMemberAccess flag can be satisfied by the call stack that includes your code. Если ReflectionPermissionFlag.MemberAccess флаг включен в предоставление, динамический метод может пропустить проверки видимости JIT-компилятора и получить доступ к закрытым данным всех типов, объявленных в модуле или в любом другом модуле в любой сборке.If the ReflectionPermissionFlag.MemberAccess flag is included in the grant, the dynamic method can skip the JIT compiler's visibility checks and access the private data of all types declared in the module or in any other module in any assembly.

    Примечание

    При указании модуля, с которым связан динамический метод, этот модуль не должен входить в предоставляемую системой сборку, которая используется для анонимного размещения.When you specify the module with which a dynamic method is associated, that module must not be in the system-provided assembly that is used for anonymous hosting.

  • Если динамический метод связан с указанным типом, он имеет доступ ко всем элементам типа независимо от уровня доступа.If the dynamic method is associated with a type that you specify, it has access to all members of the type, regardless of access level. Кроме того, проверки видимости JIT-компилятора можно пропустить.In addition, JIT visibility checks can be skipped. Это дает динамическому методу доступ к закрытым данным других типов, объявленных в том же модуле или в любом другом модуле в любой сборке.This gives the dynamic method access to the private data of other types declared in the same module or in any other module in any assembly. Динамический метод можно связать с любым типом, но код должен быть предоставлен ReflectionPermission одновременно с RestrictedMemberAccess MemberAccess флагами и.You can associate a dynamic method with any type, but your code must be granted ReflectionPermission with both the RestrictedMemberAccess and MemberAccess flags.

В следующей таблице показано, какие типы и члены доступны для анонимно размещенного динамического метода с проверками видимости JIT и без них в зависимости от того, ReflectionPermission RestrictedMemberAccess предоставлено ли значение флагом.The following table shows which types and members are accessible to an anonymously hosted dynamic method, with and without JIT visibility checks, depending on whether ReflectionPermission with the RestrictedMemberAccess flag is granted.

Без добавления RestrictedMemberAccessWithout RestrictedMemberAccess С добавлением RestrictedMemberAccessWith RestrictedMemberAccess
Без пропуска проверок видимости JITWithout skipping JIT visibility checks Открытые члены открытых типов в любой сборке.Public members of public types in any assembly. Открытые члены открытых типов в любой сборке.Public members of public types in any assembly.
Пропуск проверок видимости JIT с ограничениямиSkipping JIT visibility checks, with restrictions Открытые члены открытых типов в любой сборке.Public members of public types in any assembly. Все элементы всех типов, только в сборках, уровни доверия которых равны или меньше уровня доверия сборки, вызвавшей динамический метод.All members of all types, only in assemblies whose trust levels are equal to or less than the trust level of the assembly that emitted the dynamic method.

Примечание

Перед пакетом обновления 1 (SP1) для платформа .NET Framework 2,0 необходимо выдавать код, необходимый ReflectionPermission с ReflectionPermissionFlag.ReflectionEmit флагом.Prior to the .NET Framework 2.0 Service Pack 1, emitting code required ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. Это разрешение включается по умолчанию в именованные наборы разрешений FullTrust и LocalIntranet, но не в набор разрешений Интернета.This permission is included by default in the FullTrust and LocalIntranet named permission sets, but not in the Internet permission set. Поэтому в более ранних версиях платформа .NET Framework библиотека может использоваться с интернет-разрешениями только в том случае, если имеет SecurityCriticalAttribute атрибут, а также выполняет Assert для ReflectionEmit .Therefore, in earlier versions of the .NET Framework a library can be used with Internet permissions only if it has the SecurityCriticalAttribute attribute and also executes an Assert for ReflectionEmit. Такие библиотеки требуют тщательной проверки безопасности, так как ошибки в коде могут стать причиной уязвимости.Such libraries require careful security review because coding errors could result in security holes. Платформа .NET Framework 2.0 с пакетом обновления 1 (SP1) позволяет создавать код в сценариях частичного доверия без предъявления каких-либо требований к безопасности, так как создание кода по сути не является привилегированной операцией.The .NET Framework 2.0 SP1 allows code to be emitted in partial trust scenarios without issuing any security demands, because generating code is not inherently a privileged operation. То есть созданный код имеет не больше разрешений, чем породившая его сборка.That is, the generated code has no more permissions than the assembly that emits it. Это позволяет библиотекам, порождающим код, сохранять прозрачность для системы безопасности, что устраняет необходимость в утверждении перечисления ReflectionEmit и упрощает задачу написания безопасной библиотеки.This allows libraries that emit code to be security transparent and removes the need to assert ReflectionEmit, which simplifies the task of writing a secure library. Чтобы использовать эту функцию, приложение должно быть предназначено для платформа .NET Framework 3,5 или более поздней версии.To use this feature, your application should target the .NET Framework 3.5 or later.

В следующей таблице показано, какие типы и члены доступны для динамического метода, связанного с модулем или с типом в модуле.The following table shows which types and members are accessible to a dynamic method that is associated with a module or with a type in a module.

Связано с модулемAssociated with module Связан с типомAssociated with type
Без пропуска проверок видимости JITWithout skipping JIT visibility checks Открытые и внутренние члены открытых, внутренних и закрытых типов в модуле.Public and internal members of public, internal, and private types in the module.

Открытые члены открытых типов в любой сборке.Public members of public types in any assembly.
Все элементы связанного типа.All members of the associated type. Открытые и внутренние члены всех других типов в модуле.Public and internal members of all the other types in the module.

Открытые члены открытых типов в любой сборке.Public members of public types in any assembly.
Пропуск проверок видимости JITSkipping JIT visibility checks Все элементы всех типов в любой сборке.All members of all types in any assembly. Все элементы всех типов в любой сборке.All members of all types in any assembly.

Динамический метод, связанный с модулем, имеет разрешения этого модуля.A dynamic method that is associated with a module has the permissions of that module. Динамический метод, связанный с типом, имеет разрешения модуля, содержащего этот тип.A dynamic method that is associated with a type has the permissions of the module containing that type.

Динамические методы и их параметры не обязательно должны называться, но можно указать имена для облегчения отладки.Dynamic methods and their parameters do not have to be named, but you can specify names to assist in debugging. Настраиваемые атрибуты не поддерживаются в динамических методах или их параметрах.Custom attributes are not supported on dynamic methods or their parameters.

Хотя динамические методы являются static методами ( Shared методы в Visual Basic), ослабленные правила привязки делегата, представленные в платформа .NET Framework 2,0, позволяют привязывать динамический метод к объекту, чтобы он работал как метод экземпляра при вызове с помощью этого экземпляра делегата.Although dynamic methods are static methods (Shared methods in Visual Basic), the relaxed rules for delegate binding introduced in the .NET Framework 2.0 allow a dynamic method to be bound to an object, so that it acts like an instance method when called using that delegate instance. Пример, демонстрирующий это, предоставляется для CreateDelegate(Type, Object) перегрузки метода.An example that demonstrates this is provided for the CreateDelegate(Type, Object) method overload.

Примечание

В платформа .NET Framework 2,0 динамические методы не поддерживают символьную информацию, т. е. имена локальных переменных и сопоставление номеров строк.In the .NET Framework 2.0, dynamic methods do not support symbol information, that is, local variable names and line-number mapping. Это ограничение может быть удалено в следующей версии.This limitation might be removed in a future version. Можно использовать AssemblyBuilder во время разработки, чтобы упростить отладку созданного MSIL-кода, а затем переключиться на динамические методы во время окончательного развертывания, так как ILGenerator вызовы одинаковы в обоих случаях.You can use AssemblyBuilder during development to simplify debugging the generated Microsoft intermediate language (MSIL), and then switch to dynamic methods during final deployment, because the ILGenerator calls are the same in both cases.

ПроверкаVerification

В следующем списке перечислены условия, при которых динамические методы могут содержать непроверяемый код.The following list summarizes the conditions under which dynamic methods can contain unverifiable code. (Например, динамический метод нельзя проверить, если его InitLocals свойство имеет значение false .)(For example, a dynamic method is unverifiable if its InitLocals property is set to false.)

  • Динамический метод, связанный с критической для безопасности сборкой, также является критически важным для безопасности и может пропускать проверку.A dynamic method that is associated with a security-critical assembly is also security-critical, and can skip verification. Например, сборка без атрибутов безопасности, которая выполняется как классическое приложение, считается критической для безопасности средой выполнения.For example, an assembly without security attributes that is run as a desktop application is treated as security-critical by the runtime. При связывании динамического метода со сборкой динамический метод может содержать непроверяемый код.If you associate a dynamic method with the assembly, the dynamic method can contain unverifiable code.

  • Если динамический метод, содержащий непроверяемый код, связан со сборкой, имеющей прозрачность уровня 1, JIT-компилятор внедряет требование безопасности.If a dynamic method that contains unverifiable code is associated with an assembly that has level 1 transparency, the just-in-time (JIT) compiler injects a security demand. Запрос выполняется, только если динамический метод выполняется полностью доверенным кодом.The demand succeeds only if the dynamic method is executed by fully trusted code. См. раздел код, прозрачный для безопасности, уровень 1.See Security-Transparent Code, Level 1.

  • Если динамический метод, который содержит непроверяемый код, связан со сборкой, имеющей прозрачность уровня 2 (например, mscorlib.dll), она выдает исключение (которое внедряется с помощью JIT-компилятора) вместо выполнения требования безопасности.If a dynamic method that contains unverifiable code is associated with an assembly that has level 2 transparency (such as mscorlib.dll), it throws an exception (injected by the JIT compiler) instead of making a security demand. См. раздел прозрачный для системы безопасности код, уровень 2.See Security-Transparent Code, Level 2.

  • Анонимно размещенный динамический метод, который содержит непроверяемый код, всегда создает исключение.An anonymously hosted dynamic method that contains unverifiable code always throws an exception. Она не может пропускать проверку, даже если она создается и исполняется полностью доверенным кодом.It can never skip verification, even if it is created and executed by fully trusted code.

Исключение, которое вызывается для непроверяемого кода, зависит от способа вызова динамического метода.The exception that is thrown for unverifiable code varies depending on the way the dynamic method is invoked. При вызове динамического метода с помощью делегата, возвращенного из CreateDelegate метода, создается VerificationException исключение.If you invoke a dynamic method by using a delegate returned from the CreateDelegate method, a VerificationException is thrown. При вызове динамического метода с помощью метода создается Invoke TargetInvocationException исключение с внутренним VerificationException .If you invoke the dynamic method by using the Invoke method, a TargetInvocationException is thrown with an inner VerificationException.

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

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

Создает динамический метод, который является глобальным для модуля, указывая имя метода, атрибуты, соглашение о вызовах, тип возвращаемого значения, типы параметров, модуль и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ промежуточный язык Майкрософт (MSIL) динамического метода.Creates a dynamic method that is global to a module, specifying the method name, attributes, calling convention, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

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

Создает динамический метод, указывая имя метода, атрибуты, соглашение о вызовах, тип возвращаемого значения, типы параметров, тип, с которым логически связан динамический метод, и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ промежуточный язык Майкрософт (MSIL) динамического метода.Creates a dynamic method, specifying the method name, attributes, calling convention, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

DynamicMethod(String, Type, Type[])

Инициализирует анонимно размещенный динамический метод, указывая имя метода, тип возвращаемого значения и типы параметров.Initializes an anonymously hosted dynamic method, specifying the method name, return type, and parameter types.

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

Инициализирует анонимно размещенный динамический метод, указывая имя метода, возвращаемый тип, типы параметров и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.Initializes an anonymously hosted dynamic method, specifying the method name, return type, parameter types, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

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

Создает динамический метод, который является глобальным по отношению к модулю, используя имя метода, тип возвращаемого значения, типы параметров и модуль.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, and module.

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

Создает динамический метод, который является глобальным для модуля, указывая имя метода, тип возвращаемого значения, типы параметров, модуль и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.Creates a dynamic method that is global to a module, specifying the method name, return type, parameter types, module, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

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

Создает динамический метод, указывая имя метода, тип возвращаемого значения, типы параметров и тип, с которым логически связан динамический метод.Creates a dynamic method, specifying the method name, return type, parameter types, and the type with which the dynamic method is logically associated.

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

Создает динамический метод, указывая имя метода, тип возвращаемого значения, типы параметров, тип, с которым логически связан динамический метод, и необходимость пропуска проверки видимости JIT для типов и членов, к которым получает доступ MSIL динамического метода.Creates a dynamic method, specifying the method name, return type, parameter types, the type with which the dynamic method is logically associated, and whether just-in-time (JIT) visibility checks should be skipped for types and members accessed by the Microsoft intermediate language (MSIL) of the dynamic method.

Свойства

Attributes

Возвращает атрибуты, указанные при создании динамического метода.Gets the attributes specified when the dynamic method was created.

CallingConvention

Получает соглашение о вызовах, указанное при создании динамического метода.Gets the calling convention specified when the dynamic method was created.

ContainsGenericParameters

Получает значение, показывающее, содержит ли универсальный метод неназначенные параметры универсального типа.Gets a value that indicates whether a generic method contains unassigned generic type parameters.

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

Получает коллекцию, содержащую пользовательские атрибуты этого члена.Gets a collection that contains this member's custom attributes.

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

Возвращает тип, который объявляет метод, всегда являющийся null для динамических методов. Gets the type that declares the method, which is always null for dynamic methods.

InitLocals

Возвращает или задает значение, указывающее, инициализированы ли локальные переменные в методе нулевым значением.Gets or sets a value indicating whether the local variables in the method are zero-initialized.

IsAbstract

Возвращает значение, указывающее, является ли метод абстрактным.Gets a value indicating whether the method is abstract.

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

Возвращает значение, которое указывает, описана ли доступность данного метода или конструктора в поле Assembly; другими словами, этот метод или конструктор полностью доступен для других полей той же сборки и недоступен для производных типов, не включенных в сборку.Gets a value indicating whether the potential visibility of this method or constructor is described by Assembly; that is, the method or constructor is visible at most to other types in the same assembly, and is not visible to derived types outside the assembly.

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

Получает значение, указывающее, является ли объект MemberInfo частью сборки, содержащейся в забираемом контексте AssemblyLoadContext.Gets a value that indicates whether this MemberInfo object is part of an assembly held in a collectible AssemblyLoadContext.

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

Возвращает значение, указывающее, является ли метод конструктором.Gets a value indicating whether the method is a constructor.

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

Возвращает значение, которое указывает, описана ли доступность этого метода или конструктора в поле Family; другими словами, этот метод или конструктор доступен только в своем классе и производных классах.Gets a value indicating whether the visibility of this method or constructor is described by Family; that is, the method or constructor is visible only within its class and derived classes.

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

Возвращает значение, которое указывает, описана ли доступность этого метода или конструктора в поле FamANDAssem; другими словами, этот метод или конструктор может вызываться в производных классах, но только в том случае, если они находятся в той же сборке.Gets a value indicating whether the visibility of this method or constructor is described by FamANDAssem; that is, the method or constructor can be called by derived classes, but only if they are in the same assembly.

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

Возвращает значение, которое указывает, описана ли потенциальная доступность этого метода или конструктора в поле FamORAssem; другими словами, этот метод или конструктор может вызываться в производных классах независимо от их расположения, а также в классах той же сборки.Gets a value indicating whether the potential visibility of this method or constructor is described by FamORAssem; that is, the method or constructor can be called by derived classes wherever they are, and by classes in the same assembly.

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

Возвращает значение, указывающее, является ли метод final.Gets a value indicating whether this method is final.

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

Возвращает значение, которое указывает, является ли текущий метод универсальным.Gets a value indicating whether the current method is a generic method.

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

Возвращает значение, указывающее, представляет ли текущий объект MethodInfo определение универсального метода.Gets a value indicating whether the current MethodInfo represents the definition of a generic method.

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

Возвращает значение, указывающее, скрывается ли в производном классе только член такого же вида с точно такой же сигнатурой.Gets a value indicating whether only a member of the same kind with exactly the same signature is hidden in the derived class.

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

Возвращает значение, указывающее, является ли этот член закрытым.Gets a value indicating whether this member is private.

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

Возвращает значение, указывающее, является ли метод открытым.Gets a value indicating whether this is a public method.

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

Получает значение, которое указывает, является ли текущий динамический метод критическим с точки зрения безопасности или надежным с точки зрения безопасности и, следовательно, может ли он выполнять важные операции.Gets a value that indicates whether the current dynamic method is security-critical or security-safe-critical, and therefore can perform critical operations.

IsSecurityCritical

Получает значение, которое указывает, является ли текущий метод или конструктор критически важным для безопасности или защищенным критически важным для безопасности на данном уровне доверия и, следовательно, может ли он выполнять критические операции.Gets a value that indicates whether the current method or constructor is security-critical or security-safe-critical at the current trust level, and therefore can perform critical operations.

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

Возвращает значение, которое указывает, является ли текущий динамический метод надежным с точки зрения безопасности на текущем уровне доверия и, следовательно, может ли он выполнять критически важные операции и предоставлять доступ прозрачному коду.Gets a value that indicates whether the current dynamic method is security-safe-critical at the current trust level; that is, whether it can perform critical operations and can be accessed by transparent code.

IsSecuritySafeCritical

Получает значение, которое указывает, является ли текущий динамический метод или конструктор защищенным критически важным для безопасности и, следовательно, может ли он выполнять критические операции и предоставлять доступ прозрачному коду.Gets a value that indicates whether the current method or constructor is security-safe-critical at the current trust level; that is, whether it can perform critical operations and can be accessed by transparent code.

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

Получает значение, которое указывает, является ли текущий динамический метод прозрачным на текущем уровне доверия и, следовательно, не может выполнять критические операции.Gets a value that indicates whether the current dynamic method is transparent at the current trust level, and therefore cannot perform critical operations.

IsSecurityTransparent

Получает значение, которое указывает, является ли текущий метод или конструктор прозрачным на текущем уровне доверия и, следовательно, не может выполнять критические операции.Gets a value that indicates whether the current method or constructor is transparent at the current trust level, and therefore cannot perform critical operations.

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

Возвращает значение, указывающее, имеет ли этот метод специальное имя.Gets a value indicating whether this method has a special name.

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

Получает значение, указывающее, имеет ли метод значение static.Gets a value indicating whether the method is static.

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

Получает значение, указывающее, имеет ли метод значение virtual.Gets a value indicating whether the method is virtual.

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

Возвращает значение MemberTypes, указывающее, что этот элемент является методом.Gets a MemberTypes value indicating that this member is a method.

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

Получает значение, определяющее элемент метаданных.Gets a value that identifies a metadata element.

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

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

MethodHandle

Возвращает дескриптор представления внутренних метаданных метода.Gets a handle to the internal metadata representation of a method.

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

Получает флаги MethodImplAttributes, указывающие атрибуты реализации методы.Gets the MethodImplAttributes flags that specify the attributes of a method implementation.

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

Возвращает модуль, с которым логически связан динамический метод.Gets the module with which the dynamic method is logically associated.

Module

Получает модуль, в котором определяется тип, объявляющий член, представленный текущим объектом MemberInfo.Gets the module in which the type that declares the member represented by the current MemberInfo is defined.

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

Получает имя динамического метода.Gets the name of the dynamic method.

ReflectedType

Возвращает класс, который использовался в отражении для получения метода.Gets the class that was used in reflection to obtain the method.

ReflectedType

Получает объект класса, который использовался для извлечения данного экземпляра объекта MemberInfo.Gets the class object that was used to obtain this instance of MemberInfo.

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

Возвращает выходной параметр динамического метода.Gets the return parameter of the dynamic method.

ReturnType

Получает тип возвращаемого значения для динамического метода.Gets the type of return value for the dynamic method.

ReturnTypeCustomAttributes

Получает настраиваемые атрибуты типа возвращаемого значения для динамического метода.Gets the custom attributes of the return type for the dynamic method.

ReturnTypeCustomAttributes

Возвращает пользовательские атрибуты типа возвращаемого значения.Gets the custom attributes for the return type.

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

Методы

CreateDelegate(Type)

Завершает динамический метод и создает делегат, который может использоваться для его выполнения.Completes the dynamic method and creates a delegate that can be used to execute it.

CreateDelegate(Type, Object)

Завершает динамический метод и создает делегат, который может использоваться для его выполнения, указывая тип делегата и объект, к которому привязан делегат.Completes the dynamic method and creates a delegate that can be used to execute it, specifying the delegate type and an object the delegate is bound to.

CreateDelegate<T>()

Создает делегат типа T из этого метода.Creates a delegate of type T from this method.

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

Создает делегат типа T с указанным целевым объектом из этого метода.Creates a delegate of type T with the specified target from this method.

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

Определяет параметр динамического метода.Defines a parameter of the dynamic method.

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

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

Возвращает базовую реализацию метода.Returns the base implementation for the method.

GetBaseDefinition()

Если переопределено в производном классе, возвращает объект MethodInfo для метода в прямом или косвенном базовом классе, в котором был первоначально объявлен метод, предоставляемый этим экземпляром.When overridden in a derived class, returns the MethodInfo object for the method on the direct or indirect base class in which the method represented by this instance was first declared.

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

Возвращает все настраиваемые атрибуты, определенные для метода.Returns all the custom attributes defined for the method.

GetCustomAttributes(Boolean)

При переопределении в производном классе возвращает массив всех настраиваемых атрибутов, примененных к данному члену.When overridden in a derived class, returns an array of all custom attributes applied to this member.

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

Возвращает настраиваемые атрибуты заданного типа, которые были применены к методу.Returns the custom attributes of the specified type that have been applied to the method.

GetCustomAttributes(Type, Boolean)

При переопределении в производном классе возвращает массив настраиваемых атрибутов, применяемых к этому элементу и определяемых параметром Type.When overridden in a derived class, returns an array of custom attributes applied to this member and identified by Type.

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

Возвращает список объектов CustomAttributeData, представляющих данные об атрибутах, примененных к целевому элементу.Returns a list of CustomAttributeData objects representing data about the attributes that have been applied to the target member.

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

Возвращает объект DynamicILInfo, который может использоваться для создания тела метода из маркеров метаданных, областей и потоков промежуточного языка Майкрософт (MSIL).Returns a DynamicILInfo object that can be used to generate a method body from metadata tokens, scopes, and Microsoft intermediate language (MSIL) streams.

GetGenericArguments()

Возвращает массив объектов Type, которые представляют аргументы универсального метода, относящиеся к типу, или параметры типа определения универсального метода.Returns an array of Type objects that represent the type arguments of a generic method or the type parameters of a generic method definition.

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

Возвращает объект MethodInfo, представляющий определение универсального метода, на основе которого можно сконструировать текущий метод.Returns a MethodInfo object that represents a generic method definition from which the current method can be constructed.

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

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

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

Возвращает генератор MSIL для этого метода с размером потока MSIL, по умолчанию равным 64 байтам.Returns a Microsoft intermediate language (MSIL) generator for the method with a default MSIL stream size of 64 bytes.

GetILGenerator(Int32)

Возвращает генератор промежуточного языка Майкрософт (MSIL) для этого метода с указанным размером потока MSIL.Returns a Microsoft intermediate language (MSIL) generator for the method with the specified MSIL stream size.

GetMethodBody()

При переопределении в производном классе возвращает объект MethodBody, который обеспечивает доступ к потоку MSIL, локальным переменным и исключениям для текущего метода.When overridden in a derived class, gets a MethodBody object that provides access to the MSIL stream, local variables, and exceptions for the current method.

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

Возвращает флаги реализации для метода.Returns the implementation flags for the method.

GetMethodImplementationFlags()

При переопределении в производном классе возвращает новые флаги MethodImplAttributes.When overridden in a derived class, returns the MethodImplAttributes flags.

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

Возвращает параметры динамического метода.Returns the parameters of the dynamic method.

GetType()

Выявляет атрибуты метода и обеспечивает доступ к его метаданным.Discovers the attributes of a method and provides access to method metadata.

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

Вызывает динамический метод, используя указанные параметры и учитывая ограничения заданного модуля привязки и указанные сведения о языке и региональных параметрах.Invokes the dynamic method using the specified parameters, under the constraints of the specified binder, with the specified culture information.

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

При переопределении в производном классе вызывает отражаемый метод или конструктор с заданными параметрами.When overridden in a derived class, invokes the reflected method or constructor with the given parameters.

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

Вызывает метод или конструктор, отражаемый этим экземпляром MethodInfo.Invokes the method or constructor reflected by this MethodInfo instance.

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

Указывает, определен ли заданный тип настраиваемых атрибутов.Indicates whether the specified custom attribute type is defined.

IsDefined(Type, Boolean)

При переопределении в производном классе указывает, применяются ли для этого члена один или несколько атрибутов заданного типа или его производных типов.When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member.

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

Заменяет параметры типа элементами массива типов для определения текущего универсального метода и возвращает объект MethodInfo, представляющий итоговый сконструированный метод.Substitutes the elements of an array of types for the type parameters of the current generic method definition, and returns a MethodInfo object representing the resulting constructed method.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Возвращает сигнатуру метода, представленную в виде строки.Returns the signature of the method, represented as a string.

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

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

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

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

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

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.Retrieves the type information for an object, which can then be used to get the type information for an interface.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

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

Описание этого члена см. в разделе GetType().For a description of this member, see GetType().

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

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.Retrieves the type information for an object, which can then be used to get the type information for an interface.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

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

Описание этого члена см. в разделе IsAbstract.For a description of this member, see IsAbstract.

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

Описание этого члена см. в разделе IsAssembly.For a description of this member, see IsAssembly.

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

Описание этого члена см. в разделе IsConstructor.For a description of this member, see IsConstructor.

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

Описание этого члена см. в разделе IsFamily.For a description of this member, see IsFamily.

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

Описание этого члена см. в разделе IsFamilyAndAssembly.For a description of this member, see IsFamilyAndAssembly.

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

Описание этого члена см. в разделе IsFamilyOrAssembly.For a description of this member, see IsFamilyOrAssembly.

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

Описание этого члена см. в разделе IsFinal.For a description of this member, see IsFinal.

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

Описание этого члена см. в разделе IsHideBySig.For a description of this member, see IsHideBySig.

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

Описание этого члена см. в разделе IsPrivate.For a description of this member, see IsPrivate.

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

Описание этого члена см. в разделе IsPublic.For a description of this member, see IsPublic.

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

Описание этого члена см. в разделе IsSpecialName.For a description of this member, see IsSpecialName.

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

Описание этого члена см. в разделе IsStatic.For a description of this member, see IsStatic.

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

Описание этого члена см. в разделе IsVirtual.For a description of this member, see IsVirtual.

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

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

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

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

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

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

Возвращает массив всех настраиваемых атрибутов, определенных для этого элемента, за исключением именованных атрибутов, или пустой массив, если атрибуты отсутствуют.Returns an array of all of the custom attributes defined on this member, excluding named attributes, or an empty array if there are no custom attributes.

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

Возвращает массив настраиваемых атрибутов, определенных для этого элемента с учетом типа, или пустой массив, если отсутствуют настраиваемые атрибуты определенного типа.Returns an array of custom attributes defined on this member, identified by type, or an empty array if there are no custom attributes of that type.

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

Указывает, сколько экземпляров attributeType определено для этого элемента.Indicates whether one or more instance of attributeType is defined on this member.

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

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

GetCustomAttribute(MemberInfo, Type)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.Retrieves a custom attribute of a specified type that is applied to a specified member.

GetCustomAttribute(MemberInfo, Type, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttribute<T>(MemberInfo)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.Retrieves a custom attribute of a specified type that is applied to a specified member.

GetCustomAttribute<T>(MemberInfo, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes(MemberInfo)

Извлекает коллекцию настраиваемых атрибутов, примененных к указанному члену.Retrieves a collection of custom attributes that are applied to a specified member.

GetCustomAttributes(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов, которые применяются к указанному элементу и, при необходимости, проверяет предков этого элемента.Retrieves a collection of custom attributes that are applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes(MemberInfo, Type)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.Retrieves a collection of custom attributes of a specified type that are applied to a specified member.

GetCustomAttributes(MemberInfo, Type, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes<T>(MemberInfo)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.Retrieves a collection of custom attributes of a specified type that are applied to a specified member.

GetCustomAttributes<T>(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member.

IsDefined(MemberInfo, Type)

Указывает, применены ли какие-либо пользовательские атрибуты заданного типа к указанному члену.Indicates whether custom attributes of a specified type are applied to a specified member.

IsDefined(MemberInfo, Type, Boolean)

Указывает применены ли настраиваемые атрибуты указанного типа к указанному элементу и, при необходимости, применены ли они к его предкам.Indicates whether custom attributes of a specified type are applied to a specified member, and, optionally, applied to its ancestors.

GetMetadataToken(MemberInfo)

Возвращает маркер метаданных для заданного элемента, если он доступен.Gets a metadata token for the given member, if available.

HasMetadataToken(MemberInfo)

Возвращает значение, указывающее, доступен ли маркер метаданных для указанного элемента.Returns a value that indicates whether a metadata token is available for the specified member.

GetBaseDefinition(MethodInfo)
GetRuntimeBaseDefinition(MethodInfo)

Извлекает объект, представляющий указанный метода в прямом или косвенном базовом классе, где он был первоначально объявлен.Retrieves an object that represents the specified method on the direct or indirect base class where the method was first declared.

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