MethodBodyBlock Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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) |