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
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) |