MethodBodyBlock Klass

Definition

Representerar metodtexten i ECMA 335-sammansättningen.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Arv
MethodBodyBlock

Exempel

Det här exemplet visar hur du läser metodkroppar för alla metoder i den angivna typdefinitionen och visar metodtextinformation:

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();
        }
    }
}

Kommentarer

Metodtexten innehåller instruktioner för common intermediate language (CIL) som utgör en metod och information om dess lokala variabler och undantagsregioner. Du kan använda GetMethodBody metoden för att hämta en MethodBodyBlock instans för den angivna metoden.

Formatet för CIL-instruktioner och metadata definieras av ECMA-335-specifikationen. Mer information finns i Standard ECMA-335 – Common Language Infrastructure (CLI) på Ecma Internationals webbplats.

Egenskaper

Name Description
ExceptionRegions

Hämtar matrisen med undantagsregioner i den här metodtexten.

LocalSignature

Hämtar handtaget till signaturen för lokala variabler.

LocalVariablesInitialized

Hämtar ett värde som anger om lokala variabler i den här metoden initieras till standardvärden för deras typer.

MaxStack

Hämtar det maximala antalet objekt i utvärderingsstacken för den här metoden.

Size

Hämtar storleken på metodtexten, inklusive rubrik-, IL- och undantagsregionerna.

Metoder

Name Description
Create(BlobReader)

Skapar en ny instans av MethodBodyBlock klassen med den angivna blobläsaren.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetILBytes()

Hämtar IL-bytekoden för den här metodtexten som en bytematris.

GetILContent()

Hämtar IL-bytekoden för den här metodtexten som en oföränderlig matris.

GetILReader()

Hämtar en blobläsare som läser IL-bytekoden för den här metodtexten.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för