MethodBodyBlock Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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) |