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

In diesem Beispiel wird gezeigt, wie Methodentexte für alle Methoden in der angegebenen Typdefinition gelesen und Informationen zum Methodentext angezeigt 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), aus denen eine Methode besteht, sowie Informationen zu ihren lokalen Variablen und Ausnahmebereichen. Sie können die GetMethodBody -Methode verwenden, um eine MethodBodyBlock instance für die angegebene Methode abzurufen.

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

Eigenschaften

ExceptionRegions

Ruft das Array der Ausnahmebereiche 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 mit Standardwerten 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 einschließlich Header, IL und Ausnahmeregionen ab.

Methoden

Create(BlobReader)

Erstellt eine neue instance der MethodBodyBlock -Klasse mit dem angegebenen Blobleser.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert 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 Blobleser ab, der den IL-Bytecode dieses Methodentexts liest.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

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

(Geerbt von Object)

Gilt für: