MethodBodyBlock 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示 ECMA 335 元件中的方法主體。
public ref class MethodBodyBlock sealed
public sealed class MethodBodyBlock
type MethodBodyBlock = class
Public NotInheritable Class MethodBodyBlock
- 繼承
-
MethodBodyBlock
範例
此範例示範如何讀取指定類型定義中所有方法的方法主體,並顯示方法主體資訊:
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();
}
}
}
備註
方法主體包含 Common Intermediate Language (CIL) 指示,這些指示會組成方法及其局部變數和例外狀況區域的相關信息。 您可以使用 GetMethodBody 方法來取得 MethodBodyBlock
指定方法的實例。
CIL 指令和元數據的格式是由 ECMA-335 規格所定義。 如需詳細資訊,請參閱 Ecma International 網站上的 標準 ECMA-335 - Common Language Infrastructure (CLI) 。
屬性
ExceptionRegions |
取得這個方法主體中的例外狀況區域陣列。 |
LocalSignature |
取得局部變數簽章的句柄。 |
LocalVariablesInitialized |
取得值,這個值表示這個方法中的局部變數是否初始化為其類型的預設值。 |
MaxStack |
取得這個方法之評估堆疊上的項目數目上限。 |
Size |
取得方法主體的大小,包括標頭、IL 及例外狀況區域。 |
方法
Create(BlobReader) |
使用指定的 Blob 讀取器,建立 類別的新實例 MethodBodyBlock 。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetILBytes() |
取得這個方法主體的 IL 位元組碼做為位元組陣列。 |
GetILContent() |
取得這個方法主體的 IL 位元組程式代碼,做為不可變數組。 |
GetILReader() |
取得 Blob 讀取器,讀取這個方法主體的 IL 位元組程式代碼。 |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |