System.Reflection.Emit.MethodBuilder クラス
この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。
この MethodBuilder クラスは、名前、属性、シグネチャ、メソッド本体など、共通の中間言語 (CIL) のメソッドを完全に記述するために使用されます。 実行時にクラスを TypeBuilder 作成するために、クラスと組み合わせて使用されます。
リフレクション出力を使用すると、グローバル メソッドを定義したり、メソッドを型メンバーとして定義することができます。 メソッドを定義する API はオブジェクトを返 MethodBuilder します。
グローバル メソッド
グローバル メソッドは、オブジェクトを返すMethodBuilder
メソッドをModuleBuilder.DefineGlobalMethod使用して定義されます。
グローバル メソッドは静的である必要があります。 動的モジュールにグローバル メソッドが含まれている場合、 ModuleBuilder.CreateGlobalFunctions 共通言語ランタイムは、すべてのグローバル関数が定義されるまで動的モジュールの修正を延期するため、動的モジュールまたは含まれている動的アセンブリを永続化する前にメソッドを呼び出す必要があります。
グローバル ネイティブ メソッドは、メソッドを使用して ModuleBuilder.DefinePInvokeMethod 定義されます。 プラットフォーム呼び出し (PInvoke) メソッドを抽象または仮想として宣言することはできません。 ランタイムは、プラットフォーム呼び出し MethodAttributes.PinvokeImpl メソッドの属性を設定します。
型のメンバーとしてのメソッド
メソッドは、オブジェクトを返すMethodBuilderメソッドをTypeBuilder.DefineMethod使用して型メンバーとして定義されます。
この 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 メソッドは完全には実装されていません。 またはメソッドを使用して外側の型を取得することで、これらのメソッドをType.GetTypeAssembly.GetType反映できます。
- カスタム修飾子がサポートされています。
.NET