共用方式為


MethodBodyBlock 類別

定義

表示 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)

適用於