Condividi tramite


MethodBodyBlock Classe

Definizione

Rappresenta il corpo del metodo nell'assembly ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Ereditarietà
MethodBodyBlock

Esempio

In questo esempio viene illustrato come leggere i corpi dei metodi per tutti i metodi nella definizione di tipo specificata e visualizzare le informazioni sul corpo del metodo:

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

Commenti

Il corpo del metodo contiene istruzioni di Common Intermediate Language (CIL) che costituiscono un metodo e informazioni sulle variabili locali e sulle aree di eccezione. È possibile usare il metodo per ottenere un'istanza GetMethodBodyMethodBodyBlock per il metodo specificato.

Il formato delle istruzioni e dei metadati di CIL è definito dalla specifica ECMA-335. Per altre informazioni, vedere Standard ECMA-335 - Common Language Infrastructure (CLI) nel sito Web Ecma International.

Proprietà

ExceptionRegions

Ottiene la matrice di aree di eccezione nel corpo del metodo.

LocalSignature

Ottiene l'handle nella firma delle variabili locali.

LocalVariablesInitialized

Ottiene un valore che indica se le variabili locali in questo metodo vengono inizializzate in valori predefiniti dei tipi.

MaxStack

Ottiene il numero massimo di elementi nello stack di valutazione per questo metodo.

Size

Ottiene le dimensioni del corpo del metodo, che includono le aree di intestazione, linguaggio intermedio ed eccezione.

Metodi

Create(BlobReader)

Crea una nuova istanza della MethodBodyBlock classe usando il lettore BLOB specificato.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetILBytes()

Ottiene il bytecode IL di questo corpo del metodo come matrice di byte.

GetILContent()

Ottiene il bytecode IL di questo corpo del metodo come matrice non modificabile.

GetILReader()

Ottiene un lettore BLOB che legge il bytecode IL del corpo del metodo.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a