MethodBodyBlock Classe

Definição

Representa o corpo do método no assembly ECMA 335.

public sealed class MethodBodyBlock
Herança
MethodBodyBlock

Exemplos

Este exemplo mostra como ler corpos de método para todos os métodos na definição de tipo especificada e exibir informações do corpo do método:

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();
        }
    }
}

Comentários

O corpo do método contém instruções de CIL (Common Intermediate Language) que compõem um método e informações sobre suas variáveis locais e regiões de exceção. Você pode usar o GetMethodBody método para obter uma MethodBodyBlock instância para o método especificado.

O formato de instruções e metadados CIL é definido pela especificação ECMA-335. Para obter mais informações, consulte Standard ECMA-335 – Common Language Infrastructure (CLI) no site Ecma International.

Propriedades

ExceptionRegions

Obtém a matriz de regiões de exceção neste corpo do método.

LocalSignature

Obtém o identificador para a assinatura de variáveis locais.

LocalVariablesInitialized

Obtém um valor que indica se as variáveis locais nesse método são inicializadas para valores padrão de seus tipos.

MaxStack

Obtém o número máximo de itens na pilha de avaliação para esse método.

Size

Obtém o tamanho do corpo do método, incluindo as regiões de cabeçalho, IL e exceção.

Métodos

Create(BlobReader)

Cria uma nova instância da MethodBodyBlock classe usando o leitor de blob especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetILBytes()

Obtém o código de bytes IL desse corpo do método como uma matriz de bytes.

GetILContent()

Obtém o código de bytes IL desse corpo do método como uma matriz imutável.

GetILReader()

Obtém um leitor de blob que lê o código de bytes IL desse corpo do método.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8 (package-provided), 8, 9 (package-provided), 9
.NET Framework 4.7 (package-provided), 4.7.1 (package-provided), 4.7.2 (package-provided), 4.8 (package-provided)
.NET Standard 2.0 (package-provided)
UWP 10.0