Partager via


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 dans 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 un MethodBodyBlock instance pour la méthode spécifiée.

Le format des instructions cil et des métadonnées 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

ExceptionRegions

Obtient le tableau des régions d’exception dans ce corps de 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 avec les 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 méthode, ce qui inclut l’en-tête, le langage intermédiaire et les régions d’exception.

Méthodes

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

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetILBytes()

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

GetILContent()

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

GetILReader()

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

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

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

(Hérité de Object)

S’applique à