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


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, составляющие метод, и сведения о его локальных переменных и областях исключений. Для получения MethodBodyBlock экземпляра GetMethodBody для указанного метода можно использовать метод .

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

Свойства

ExceptionRegions

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

LocalSignature

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

LocalVariablesInitialized

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

MaxStack

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

Size

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

Методы

Create(BlobReader)

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

Equals(Object)

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

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

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

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

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

GetILContent()

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

GetILReader()

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

GetType()

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

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

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

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

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

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

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