MethodBodyBlock Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje tělo metody v sestavení ECMA 335.
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- Dědičnost
-
MethodBodyBlock
Příklady
Tento příklad ukazuje, jak číst těla metody pro všechny metody v definici zadaného typu a zobrazovat text metody:
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();
}
}
}
Poznámky
Tělo metody obsahuje instrukce CIL (Common Intermediate Language), které tvoří metodu, a informace o jejích místních proměnných a oblastech výjimek. K získání instance pro zadanou MethodBodyBlock
metodu GetMethodBody můžete použít metodu .
Formát pokynů a metadat CIL je definován specifikací ECMA-335. Další informace najdete v tématu Standard ECMA-335 – Common Language Infrastructure (CLI) na webu Ecma International.
Vlastnosti
ExceptionRegions |
Získá pole oblastí výjimek v tomto těle metody. |
LocalSignature |
Získá popisovač k podpisu místních proměnných. |
LocalVariablesInitialized |
Získá hodnotu, která označuje, zda jsou místní proměnné v této metodě inicializovány na výchozí hodnoty jejich typů. |
MaxStack |
Získá maximální počet položek v zásobníku hodnocení pro tuto metodu. |
Size |
Získá velikost těla metody, včetně hlaviček, IL a oblastí výjimek. |
Metody
Create(BlobReader) |
Vytvoří novou instanci MethodBodyBlock třídy pomocí zadané čtečky objektů blob. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetILBytes() |
Získá bajtový kód IL těla této metody jako pole bajtů. |
GetILContent() |
Získá bajtový kód IL těla této metody jako neměnné pole. |
GetILReader() |
Získá čtenář objektu blob, který čte bajtový kód IL těla této metody. |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Platí pro
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro