System.Reflection.Emit.MethodBuilder 類別
本文提供此 API 參考文件的補充備註。
類別 MethodBuilder 可用來完整描述通用中繼語言 (CIL) 中的方法,包括名稱、屬性、簽章和方法主體。 它會與 類別搭配 TypeBuilder 使用,以在運行時間建立類別。
您可以使用反映發出來定義全域方法,以及將方法定義為類型成員。 定義方法的 API 會傳回 MethodBuilder 物件。
全域方法
全域方法是使用 ModuleBuilder.DefineGlobalMethod 傳回 MethodBuilder
物件的 方法所定義。
全域方法必須是靜態的。 如果動態模組包含全域方法, ModuleBuilder.CreateGlobalFunctions 則必須先呼叫 方法,才能保存動態模組或包含動態元件,因為 Common Language Runtime 會延後修正動態模組,直到定義所有全域函式為止。
全域原生方法是使用 ModuleBuilder.DefinePInvokeMethod 方法來定義。 平台調用 (PInvoke) 方法不得宣告為抽象或虛擬。 運行時間會設定 MethodAttributes.PinvokeImpl 平台調用方法的屬性。
做為型別成員的方法
方法會使用 TypeBuilder.DefineMethod 傳回 MethodBuilder 物件的 方法,定義為類型成員。
方法 DefineParameter 可用來設定參數的名稱和參數屬性,或傳回值的名稱和參數屬性。 ParameterBuilder這個方法傳回的物件代表參數或傳回值。 ParameterBuilder對象可用來設定封送處理、設定常數值,以及套用自定義屬性。
屬性
列舉的成員 MethodAttributes 會定義動態方法的精確字元:
- 靜態方法是使用 MethodAttributes.Static 屬性來指定。
- 最後的方法(無法覆寫的方法)是使用 MethodAttributes.Final 屬性來指定。
- 虛擬方法是使用 MethodAttributes.Virtual 屬性來指定。
- 抽象方法是使用 MethodAttributes.Abstract 屬性來指定。
- 數個屬性會決定方法可見性。 請參閱 列舉的描述 MethodAttributes 。
- 實作多載運算子的方法必須設定 MethodAttributes.SpecialName 屬性。
- 完成項必須設定 MethodAttributes.SpecialName 屬性。
已知問題
- 雖然 MethodBuilder 衍生自 MethodInfo,但 類別中 MethodInfo 定義的一些抽象方法並未在 中 MethodBuilder完全實作。 這些 MethodBuilder 方法會擲回 NotSupportedException。 例如, MethodBuilder.Invoke 方法並未完全實作。 您可以使用 或 Assembly.GetType 方法擷取封入型Type.GetType別,以反映這些方法。
- 支援自定義修飾詞。