MethodBodyBlock Classe

Définition

Représente le corps de la méthode dans l’assembly ECMA 335.

public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
Héritage
MethodBodyBlock

Exemples

Cet exemple montre comment lire les corps de méthode pour toutes les méthodes de la définition de type spécifiée et afficher les informations de corps de méthode :

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

Remarques

Le corps de la méthode contient des instructions CIL (Common Intermediate Language) qui composent une méthode et des informations sur ses variables locales et ses régions d’exception. Vous pouvez utiliser la GetMethodBody méthode pour obtenir une MethodBodyBlock instance de la méthode spécifiée.

Le format des instructions et métadonnées CIL est défini par la spécification ECMA-335. Pour plus d’informations, consultez Standard ECMA-335 - Common Language Infrastructure (CLI) sur le site Web Ecma International.

Propriétés

Nom Description
ExceptionRegions

Obtient le tableau des régions d’exception dans le corps de cette méthode.

LocalSignature

Obtient le handle de la signature des variables locales.

LocalVariablesInitialized

Obtient une valeur qui indique si les variables locales de cette méthode sont initialisées en valeurs par défaut de leurs types.

MaxStack

Obtient le nombre maximal d’éléments sur la pile d’évaluation pour cette méthode.

Size

Obtient la taille du corps de la méthode, y compris les régions d’en-tête, d’il et d’exception.

Méthodes

Nom Description
Create(BlobReader)

Crée une instance de la classe à l’aide MethodBodyBlock du lecteur d’objets blob spécifié.

Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetILBytes()

Obtient le bytecode IL de ce corps de méthode sous forme de tableau d’octets.

GetILContent()

Obtient le bytecode IL de ce corps de méthode en tant que tableau immuable.

GetILReader()

Obtient un lecteur d’objets blob qui lit le bytecode IL de ce corps de méthode.

GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)

S’applique à