MethodBodyBlock Класс

Определение

Представляет текст метода в сборке ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Наследование
MethodBodyBlock

Примеры

В этом примере показано, как считывать тела методов для всех методов в указанном определении типа и отображать сведения о тексте метода:

static void PrintMethods(PEReader reader, MetadataReader mr, TypeDefinition tdef)
{
    MethodDefinitionHandleCollection methods = tdef.GetMethods();

    foreach (MethodDefinitionHandle mdefh in methods)
    {
        MethodDefinition mdef = mr.GetMethodDefinition(mdefh);
        string mname = mr.GetString(mdef.Name);
        Console.WriteLine($"Method: {mname}");

        // Get the relative address of the method body in the executable
        int rva = mdef.RelativeVirtualAddress;

        if (rva == 0)
        {
            Console.WriteLine("Method body not found");
            Console.WriteLine();
            continue;
        }

        // Get method body information
        MethodBodyBlock mb = reader.GetMethodBody(rva);
        Console.WriteLine($"  Maximum stack size: {mb.MaxStack}");
        Console.WriteLine($"  Local variables initialized: {mb.LocalVariablesInitialized}");

        byte[]? il = mb.GetILBytes();
        Console.WriteLine($"  Method body size: {il?.Length ?? 0}");
        Console.WriteLine($"  Exception regions: {mb.ExceptionRegions.Length}");
        Console.WriteLine();

        foreach (var region in mb.ExceptionRegions)
        {
            Console.WriteLine(region.Kind.ToString());
            Console.WriteLine($"  Try block offset: {region.TryOffset}");
            Console.WriteLine($"  Try block length: {region.TryLength}");
            Console.WriteLine($"  Handler offset: {region.HandlerOffset}");
            Console.WriteLine($"  Handler length: {region.HandlerLength}");
            Console.WriteLine();
        }
    }
}

Комментарии

Текст метода содержит инструкции по языку CIL, составляющие метод и сведения о локальных переменных и регионах исключений. Метод можно использовать GetMethodBody для получения MethodBodyBlock экземпляра для указанного метода.

Формат инструкций и метаданных CIL определяется спецификацией ECMA-335. Дополнительные сведения см. в статье "Стандартная среда ECMA-335 — инфраструктура общего языка( CLI) на веб-сайте Ecma International.

Свойства

Имя Описание
ExceptionRegions

Возвращает массив областей исключений в этом тексте метода.

LocalSignature

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

LocalVariablesInitialized

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

MaxStack

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

Size

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

Методы

Имя Описание
Create(BlobReader)

Создает новый экземпляр класса с помощью указанного MethodBodyBlock средства чтения BLOB-объектов.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

Служит хэш-функцией по умолчанию.

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

Получает байт-код il этого метода в виде массива байтов.

GetILContent()

Возвращает байт-код il этого метода в виде неизменяемого массива.

GetILReader()

Возвращает средство чтения BLOB-объектов, которое считывает байт-код IL этого текста метода.

GetType()

Возвращает Type текущего экземпляра.

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

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

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

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

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

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