MethodBodyBlock Klasse

Definition

Stellt den Methodentext in der ECMA 335-Assembly dar.

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

Beispiele

Dieses Beispiel zeigt, wie Methodentexte für alle Methoden in der angegebenen Typdefinition und Anzeigemethodentextinformationen gelesen werden:

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

Hinweise

Der Methodentext enthält CIL-Anweisungen (Common Intermediate Language), die eine Methode und Informationen zu den lokalen Variablen und Ausnahmebereichen bilden. Mit der GetMethodBody Methode können Sie eine MethodBodyBlock Instanz für die angegebene Methode abrufen.

Das Format der CIL-Anweisungen und -Metadaten wird durch die ECMA-335-Spezifikation definiert. Weitere Informationen finden Sie auf der Ecma International-Website unter Standard ECMA-335 - Common Language Infrastructure (CLI ).

Eigenschaften

Name Beschreibung
ExceptionRegions

Ruft das Array von Ausnahmebereichen in diesem Methodentext ab.

LocalSignature

Ruft das Handle für die Signatur lokaler Variablen ab.

LocalVariablesInitialized

Ruft einen Wert ab, der angibt, ob lokale Variablen in dieser Methode auf Standardwerte ihrer Typen initialisiert werden.

MaxStack

Ruft die maximale Anzahl von Elementen im Auswertungsstapel für diese Methode ab.

Size

Ruft die Größe des Methodentexts ab, einschließlich kopfzeilen-, IL- und Ausnahmebereiche.

Methoden

Name Beschreibung
Create(BlobReader)

Erstellt eine neue Instanz der MethodBodyBlock Klasse mit dem angegebenen BLOB-Reader.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetILBytes()

Ruft den IL-Bytecode dieses Methodentexts als Bytearray ab.

GetILContent()

Ruft den IL-Bytecode dieses Methodentexts als unveränderliches Array ab.

GetILReader()

Ruft einen BLOB-Reader ab, der den IL-Bytecode dieses Methodentexts liest.

GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: