Udostępnij za pośrednictwem


MethodBodyBlock Klasa

Definicja

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)

Dotyczy