MethodBodyBlock Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje treść metody w zestawie ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Dziedziczenie
-
MethodBodyBlock
Przykłady
W tym przykładzie pokazano, jak odczytać treści metod dla wszystkich metod w określonej definicji typu i wyświetlić informacje o treści metody:
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();
}
}
}
Uwagi
Treść metody zawiera instrukcje dotyczące języka Common Intermediate Language (CIL), które tworzą metodę i informacje o lokalnych zmiennych i regionach wyjątków. Możesz użyć GetMethodBody metody , aby pobrać MethodBodyBlock
wystąpienie dla określonej metody.
Format instrukcji i metadanych CIL jest definiowany przez specyfikację ECMA-335. Aby uzyskać więcej informacji, zobacz Standard ECMA-335 — Common Language Infrastructure (CLI) w witrynie sieci Web Ecma International.
Właściwości
ExceptionRegions |
Pobiera tablicę regionów wyjątków w tej treści metody. |
LocalSignature |
Pobiera dojście do sygnatury zmiennych lokalnych. |
LocalVariablesInitialized |
Pobiera wartość wskazującą, czy zmienne lokalne w tej metodzie są inicjowane do wartości domyślnych ich typów. |
MaxStack |
Pobiera maksymalną liczbę elementów na stosie oceny dla tej metody. |
Size |
Pobiera rozmiar treści metody, w tym nagłówka, il i regionów wyjątków. |
Metody
Create(BlobReader) |
Tworzy nowe wystąpienie MethodBodyBlock klasy przy użyciu określonego czytnika obiektów blob. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetILBytes() |
Pobiera kod bajtowy il tej treści metody jako tablicę bajtów. |
GetILContent() |
Pobiera kod bajtowy IL tej treści metody jako tablicę niezmienną. |
GetILReader() |
Pobiera czytnik obiektów blob, który odczytuje kod bajtowy IL tej treści metody. |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |