MethodBodyBlock Třída

Definice

Představuje tělo metody v sestavení ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Dědičnost
MethodBodyBlock

Příklady

Tento příklad ukazuje, jak číst těla metody pro všechny metody v zadané definici typu a zobrazovat informace o těle 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();
        }
    }
}

Poznámky

Tělo metody obsahuje instrukce CIL (Common Intermediate Language), které tvoří metodu a informace o místních proměnných a oblastech výjimek. Tuto metodu GetMethodBody můžete použít k získání instance pro zadanou MethodBodyBlock metodu.

Formát instrukcí a metadat CIL je definován specifikací ECMA-335. Další informace naleznete v tématu Standard ECMA-335 - Common Language Infrastructure (CLI) na webu Ecma International.

Vlastnosti

Name Description
ExceptionRegions

Získá pole oblastí výjimek v tomto těle metody.

LocalSignature

Získá popisovač k podpisu místních proměnných.

LocalVariablesInitialized

Získá hodnotu, která označuje, zda místní proměnné v této metodě jsou inicializovány na výchozí hodnoty jejich typů.

MaxStack

Získá maximální počet položek v zásobníku vyhodnocení pro tuto metodu.

Size

Získá velikost těla metody, včetně záhlaví, IL a oblastí výjimek.

Metody

Name Description
Create(BlobReader)

Vytvoří novou instanci MethodBodyBlock třídy pomocí zadané čtečky objektů blob.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetILBytes()

Získá bajt il bajtový kód tohoto těla metody jako bajtové pole.

GetILContent()

Získá bajt il bajtový kód této metody jako neměnné pole.

GetILReader()

Získá čtečku objektů blob, která čte bajtové kódy IL tohoto těla metody.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro