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. Дополнительные сведения см. в статье 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)

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