MethodBodyBlock Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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) |