MethodBodyBlock Classe

Definição

Representa o corpo do método na montagem ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Herança
MethodBodyBlock

Exemplos

Este exemplo mostra como ler os corpos dos métodos para todos os métodos na definição de tipo especificada e mostrar a informação 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();
        }
    }
}

Observações

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

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

Propriedades

Name Description
ExceptionRegions

Obtém o array de regiões de exceção neste corpo de método.

LocalSignature

Recebe o handle para a assinatura das variáveis locais.

LocalVariablesInitialized

Obtém um valor que indica se as variáveis locais neste método estão inicializadas aos valores padrão dos seus tipos.

MaxStack

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

Size

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

Métodos

Name Description
Create(BlobReader)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetILBytes()

Obtém o bytecode IL deste corpo de método como um array de bytes.

GetILContent()

Obtém o bytecode IL deste corpo de método como um array imutável.

GetILReader()

Obtém um leitor de blobs que lê o bytecode IL do corpo deste método.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a