本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

MethodBody 類別

 

提供存取權的中繼資料和 MSIL 主體的方法。

命名空間:   System.Reflection
組件:  mscorlib (於 mscorlib.dll)

System.Object
  System.Reflection.MethodBody

[ComVisibleAttribute(true)]
public class MethodBody

名稱描述
System_CAPS_protmethodMethodBody()

初始化 MethodBody 類別的新執行個體。

名稱描述
System_CAPS_pubpropertyExceptionHandlingClauses

取得包含在方法主體中之所有例外狀況處理子句的清單。

System_CAPS_pubpropertyInitLocals

取得值,指出是否在方法主體中的本機變數初始化為其型別的預設值。

System_CAPS_pubpropertyLocalSignatureMetadataToken

取得描述中繼資料中方法的區域變數簽章的中繼資料語彙基元。

System_CAPS_pubpropertyLocalVariables

取得方法主體中宣告的區域變數清單。

System_CAPS_pubpropertyMaxStackSize

執行方法時,取得運算元堆疊上的項目數目上限。

名稱描述
System_CAPS_pubmethodEquals(Object)

判斷指定的物件是否等於目前的物件。(繼承自 Object。)

System_CAPS_protmethodFinalize()

在記憶體回收開始前,允許物件嘗試釋放資源,並執行其他清除作業。(繼承自 Object。)

System_CAPS_pubmethodGetHashCode()

做為預設雜湊函式。(繼承自 Object。)

System_CAPS_pubmethodGetILAsByteArray()

傳回的 MSIL 方法主體中,做為位元組陣列。

System_CAPS_pubmethodGetType()

取得目前執行個體的 Type(繼承自 Object。)

System_CAPS_protmethodMemberwiseClone()

建立目前 Object 的淺層複製。(繼承自 Object。)

System_CAPS_pubmethodToString()

傳回代表目前物件的字串。(繼承自 Object。)

MethodBody 類別會提供與存取權的本機變數和在方法主體中的例外狀況處理子句的相關資訊的 Microsoft 中繼語言 (MSIL) 構成方法主體。

您可以使用語彙基元解析方法的模組類別,例如 ResolveType, ,ResolveMethod, ,和 ResolveType, ,以解決在方法主體中的語彙基元 Type 物件 MethodInfo 物件,和 FieldInfo 提供型別、 方法和欄位由方法主體中的 MSIL 存取的詳細的資訊的物件。

System_CAPS_note注意

剖析方法主體需要徹底了解的中繼資料和 MSIL 指令格式。 通用語言基礎結構 (CLI) 文件,尤其是 < 分割 II ︰ 中繼資料定義和語意 > 和 < 資料分割 III: CIL 指令集 > 中可以找到資訊。 文件取得的途徑。請參閱 ECMA C# and Common Language Infrastructure Standards msdn 和 Standard ECMA-335 - Common Language Infrastructure (CLI) Ecma 國際網站上。

若要取得 MethodBody 物件指定方法,必須先取得 MethodInfo 物件方法,然後呼叫 MethodInfo 物件的 GetMethodBody 方法。

下列程式碼範例會定義名為的測試方法 MethodBodyExample ,並顯示其本機變數的資訊和例外狀況處理子句。 MethodBase.GetMethodBody 方法用來取得 MethodBody 測試方法的物件。

此範例會使用 LocalVariables 屬性,以取得一份 LocalVariableInfo 物件,並顯示其型別和索引順序。 ExceptionHandlingClauses 屬性用來取得例外狀況處理子句的清單。

System_CAPS_note注意

並非所有電腦語言可以都產生 ExceptionHandlingClauseOptions.Filter 子句。 Visual Basic 範例會顯示篩選子句,使用 Visual Basic When 運算式、 其他語言的範例中會省略。

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        // Get method body information.
        MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample");
        MethodBody mb = mi.GetMethodBody();
        Console.WriteLine("\r\nMethod: {0}", mi);

        // Display the general information included in the 
        // MethodBody object.
        Console.WriteLine("    Local variables are initialized: {0}", 
            mb.InitLocals);
        Console.WriteLine("    Maximum number of items on the operand stack: {0}", 
            mb.MaxStackSize);

        // Display information about the local variables in the
        // method body.
        Console.WriteLine();
        foreach (LocalVariableInfo lvi in mb.LocalVariables)
        {
            Console.WriteLine("Local variable: {0}", lvi);
        }

        // Display exception handling clauses.
        Console.WriteLine();
        foreach (ExceptionHandlingClause ehc in mb.ExceptionHandlingClauses)
        {
            Console.WriteLine(ehc.Flags.ToString());

            // The FilterOffset property is meaningful only for Filter
            // clauses. The CatchType property is not meaningful for 
            // Filter or Finally clauses. 
            switch (ehc.Flags)
            {
                case ExceptionHandlingClauseOptions.Filter:
                    Console.WriteLine("        Filter Offset: {0}", 
                        ehc.FilterOffset);
                    break;
                case ExceptionHandlingClauseOptions.Finally:
                    break;
                default:
                    Console.WriteLine("    Type of exception: {0}", 
                        ehc.CatchType);
                    break;
            }

            Console.WriteLine("       Handler Length: {0}", ehc.HandlerLength);
            Console.WriteLine("       Handler Offset: {0}", ehc.HandlerOffset);
            Console.WriteLine("     Try Block Length: {0}", ehc.TryLength);
            Console.WriteLine("     Try Block Offset: {0}", ehc.TryOffset);
        }
    }

    // The Main method contains code to analyze this method, using
    // the properties and methods of the MethodBody class.
    public void MethodBodyExample(object arg)
    {
        // Define some local variables. In addition to these variables,
        // the local variable list includes the variables scoped to 
        // the catch clauses.
        int var1 = 42;
        string var2 = "Forty-two";

        try
        {
            // Depending on the input value, throw an ArgumentException or 
            // an ArgumentNullException to test the Catch clauses.
            if (arg == null)
            {
                throw new ArgumentNullException("The argument cannot be null.");
            }
            if (arg.GetType() == typeof(string))
            {
                throw new ArgumentException("The argument cannot be a string.");
            }        
        }

        // There is no Filter clause in this code example. See the Visual 
        // Basic code for an example of a Filter clause.

        // This catch clause handles the ArgumentException class, and
        // any other class derived from Exception.
        catch(Exception ex)
        {
            Console.WriteLine("Ordinary exception-handling clause caught: {0}", 
                ex.GetType());
        }        
        finally
        {
            var1 = 3033;
            var2 = "Another string.";
        }
    }
}

// This code example produces output similar to the following:
//
//Method: Void MethodBodyExample(System.Object)
//    Local variables are initialized: True
//    Maximum number of items on the operand stack: 2
//
//Local variable: System.Int32 (0)
//Local variable: System.String (1)
//Local variable: System.Exception (2)
//Local variable: System.Boolean (3)
//
//Clause
//    Type of exception: System.Exception
//       Handler Length: 21
//       Handler Offset: 70
//     Try Block Length: 61
//     Try Block Offset: 9
//Finally
//       Handler Length: 14
//       Handler Offset: 94
//     Try Block Length: 85
//     Try Block Offset: 9

.NET Framework
自 2.0 起供應

此類型的任何 public static (在 Visual Basic 中 共用 在 Visual Basic 中) 成員皆為安全執行緒。不保證任何執行個體成員為安全執行緒。

回到頁首
顯示: