MethodBodyBlock Clase

Definición

Representa el cuerpo del método en el ensamblado ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Herencia
MethodBodyBlock

Ejemplos

En este ejemplo se muestra cómo leer cuerpos de método para todos los métodos de la definición de tipo especificada y mostrar información del cuerpo del 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();
        }
    }
}

Comentarios

El cuerpo del método contiene instrucciones del lenguaje intermedio común (CIL) que componen un método e información sobre sus variables locales y regiones de excepción. Puede usar el GetMethodBody método para obtener una MethodBodyBlock instancia del método especificado.

El formato de las instrucciones y metadatos de CIL se define mediante la especificación ECMA-335. Para obtener más información, consulte Standard ECMA-335 - Common Language Infrastructure (CLI) en el sitio web de Ecma International.

Propiedades

ExceptionRegions

Obtiene la matriz de regiones de excepción en este cuerpo del método.

LocalSignature

Obtiene el identificador de la firma de variables locales.

LocalVariablesInitialized

Obtiene un valor que indica si las variables locales de este método se inicializan en los valores predeterminados de sus tipos.

MaxStack

Obtiene el número máximo de elementos de la pila de evaluación para este método.

Size

Obtiene el tamaño del cuerpo del método, incluidas las regiones de encabezado, IL y excepciones.

Métodos

Create(BlobReader)

Crea una nueva instancia de la MethodBodyBlock clase utilizando el lector de blobs especificado.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetILBytes()

Obtiene el código de bytes IL de este cuerpo de método como una matriz de bytes.

GetILContent()

Obtiene el código de bytes il de este cuerpo de método como una matriz inmutable.

GetILReader()

Obtiene un lector de blobs que lee el código de bytes de IL de este cuerpo del método.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a