MethodBodyBlock Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa el cuerpo del método en el ensamblado ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Herencia
-
MethodBodyBlock
Ejemplos
En este ejemplo se muestra cómo leer cuerpos de método para todos los métodos de la definición de tipo especificada y mostrar información del cuerpo del método:
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();
}
}
}
Comentarios
El cuerpo del método contiene instrucciones del lenguaje intermedio común (CIL) que componen un método e información sobre sus variables locales y regiones de excepción. Puede usar el GetMethodBody método para obtener una MethodBodyBlock
instancia del método especificado.
El formato de las instrucciones y los metadatos de la CIL se define mediante la especificación ECMA-335. Para obtener más información, vea Standard ECMA-335 - Common Language Infrastructure (CLI) en el sitio web de Ecma International.
Propiedades
ExceptionRegions |
Obtiene la matriz de regiones de excepción en este cuerpo del método. |
LocalSignature |
Obtiene el identificador de la firma de variables locales. |
LocalVariablesInitialized |
Obtiene un valor que indica si las variables locales de este método se inicializan en los valores predeterminados de sus tipos. |
MaxStack |
Obtiene el número máximo de elementos de la pila de evaluación para este método. |
Size |
Obtiene el tamaño del cuerpo del método, incluidas las regiones de encabezado, IL y excepciones. |
Métodos
Create(BlobReader) |
Crea una nueva instancia de la MethodBodyBlock clase mediante el lector de blobs especificado. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetILBytes() |
Obtiene el código de bytes il de este cuerpo de método como una matriz de bytes. |
GetILContent() |
Obtiene el código de bytes il de este cuerpo del método como una matriz inmutable. |
GetILReader() |
Obtiene un lector de blobs que lee el código de bytes de IL de este cuerpo del método. |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |