MethodBodyBlock Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta il corpo del metodo nell'assembly ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Ereditarietà
-
MethodBodyBlock
Esempio
In questo esempio viene illustrato come leggere i corpi dei metodi per tutti i metodi nella definizione di tipo specificata e visualizzare le informazioni sul corpo del metodo:
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();
}
}
}
Commenti
Il corpo del metodo contiene istruzioni di Common Intermediate Language (CIL) che costituiscono un metodo e informazioni sulle variabili locali e sulle aree di eccezione. È possibile usare il metodo per ottenere un'istanza GetMethodBodyMethodBodyBlock
per il metodo specificato.
Il formato delle istruzioni e dei metadati di CIL è definito dalla specifica ECMA-335. Per altre informazioni, vedere Standard ECMA-335 - Common Language Infrastructure (CLI) nel sito Web Ecma International.
Proprietà
ExceptionRegions |
Ottiene la matrice di aree di eccezione nel corpo del metodo. |
LocalSignature |
Ottiene l'handle nella firma delle variabili locali. |
LocalVariablesInitialized |
Ottiene un valore che indica se le variabili locali in questo metodo vengono inizializzate in valori predefiniti dei tipi. |
MaxStack |
Ottiene il numero massimo di elementi nello stack di valutazione per questo metodo. |
Size |
Ottiene le dimensioni del corpo del metodo, che includono le aree di intestazione, linguaggio intermedio ed eccezione. |
Metodi
Create(BlobReader) |
Crea una nuova istanza della MethodBodyBlock classe usando il lettore BLOB specificato. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetILBytes() |
Ottiene il bytecode IL di questo corpo del metodo come matrice di byte. |
GetILContent() |
Ottiene il bytecode IL di questo corpo del metodo come matrice non modificabile. |
GetILReader() |
Ottiene un lettore BLOB che legge il bytecode IL del corpo del metodo. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |