TypeBuilder.DefineConstructor TypeBuilder.DefineConstructor TypeBuilder.DefineConstructor TypeBuilder.DefineConstructor Method

定義

動的な型に新しいコンストラクターを追加します。Adds a new constructor to the dynamic type.

オーバーロード

DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[])

型に、指定した属性およびシグネチャの新しいコンストラクターを追加します。Adds a new constructor to the type, with the given attributes and signature.

DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][])

指定された属性、署名、およびカスタム修飾子で、型に新しいコンストラクターを追加します。Adds a new constructor to the type, with the given attributes, signature, and custom modifiers.

DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[]) DefineConstructor(MethodAttributes, CallingConventions, Type[])

型に、指定した属性およびシグネチャの新しいコンストラクターを追加します。Adds a new constructor to the type, with the given attributes and signature.

public:
 System::Reflection::Emit::ConstructorBuilder ^ DefineConstructor(System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, cli::array <Type ^> ^ parameterTypes);
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.Emit.ConstructorBuilder DefineConstructor (System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type[] parameterTypes);
member this.DefineConstructor : System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type[] -> System.Reflection.Emit.ConstructorBuilder
Public Function DefineConstructor (attributes As MethodAttributes, callingConvention As CallingConventions, parameterTypes As Type()) As ConstructorBuilder

パラメーター

attributes
MethodAttributes MethodAttributes MethodAttributes MethodAttributes

コンストラクターの属性。The attributes of the constructor.

callingConvention
CallingConventions CallingConventions CallingConventions CallingConventions

コンストラクターの呼び出し規約。The calling convention of the constructor.

parameterTypes
Type[]

コンストラクターのパラメーター型。The parameter types of the constructor.

戻り値

定義済みのコンストラクター。The defined constructor.

例外

型は CreateType() を使用して既に作成されました。The type was previously created using CreateType().

次のコード サンプルの使用を示しますDefineConstructor動的な型のコンス トラクターの特定の署名と属性を設定し、対応するを返すConstructorBuilderの MSIL を生成します。The following code sample demonstrates the use of DefineConstructor to set a constructor's particular signature and attributes on a dynamic type and return a corresponding ConstructorBuilder for MSIL population.

// Define the constructor.
array<Type^>^ constructorArgs = {String::typeid};
ConstructorBuilder^ myConstructorBuilder =
   helloWorldTypeBuilder->DefineConstructor( MethodAttributes::Public,
      CallingConventions::Standard, constructorArgs );
// Generate IL for the method.The constructor stores its argument in the private field.
ILGenerator^ myConstructorIL = myConstructorBuilder->GetILGenerator();
myConstructorIL->Emit( OpCodes::Ldarg_0 );
myConstructorIL->Emit( OpCodes::Ldarg_1 );
myConstructorIL->Emit( OpCodes::Stfld, myGreetingField );
myConstructorIL->Emit( OpCodes::Ret );
// Define the constructor.
Type[] constructorArgs = { typeof(String) };
ConstructorBuilder myConstructorBuilder = 
   helloWorldTypeBuilder.DefineConstructor(MethodAttributes.Public, 
                      CallingConventions.Standard, constructorArgs);
// Generate IL for the method.The constructor stores its argument in the private field.
ILGenerator myConstructorIL = myConstructorBuilder.GetILGenerator();
myConstructorIL.Emit(OpCodes.Ldarg_0);
myConstructorIL.Emit(OpCodes.Ldarg_1);
myConstructorIL.Emit(OpCodes.Stfld, myGreetingField);
myConstructorIL.Emit(OpCodes.Ret);
' Define the constructor.
Dim constructorArgs As Type() = {GetType(String)}
Dim myConstructorBuilder As ConstructorBuilder = helloWorldTypeBuilder.DefineConstructor _
                     (MethodAttributes.Public, CallingConventions.Standard, constructorArgs)
' Generate IL for the method.The constructor stores its argument in the private field.
Dim myConstructorIL As ILGenerator = myConstructorBuilder.GetILGenerator()
myConstructorIL.Emit(OpCodes.Ldarg_0)
myConstructorIL.Emit(OpCodes.Ldarg_1)
myConstructorIL.Emit(OpCodes.Stfld, myGreetingField)
myConstructorIL.Emit(OpCodes.Ret)

注釈

動的な型のコンス トラクターを定義しないと、既定のコンス トラクターが自動的に提供し、基底クラスの既定のコンス トラクターを呼び出します。If you do not define a constructor for your dynamic type, a default constructor is provided automatically, and it calls the default constructor of the base class.

既定のコンス トラクターは、動的な型のコンス トラクターを定義する場合は提供されません。If you define a constructor for your dynamic type, a default constructor is not provided. コンス トラクターが定義しただけでなく、既定のコンス トラクターを提供するために、次のオプションがあります。You have the following options for providing a default constructor in addition to the constructor you defined:

  • 単に、基底クラスの既定のコンス トラクターを呼び出す既定のコンス トラクターを実行する場合は、使用、DefineDefaultConstructorメソッドを作成 (および必要に応じてアクセスを制限)。If you want a default constructor that simply calls the default constructor of the base class, you can use the DefineDefaultConstructor method to create one (and optionally restrict access to it). この既定のコンス トラクターの実装は提供されません。Do not provide an implementation for this default constructor. この場合、コンス トラクターを使用するときに、例外がスローされます。If you do, an exception is thrown when you try to use the constructor. 例外がスローされない場合に、CreateTypeメソッドが呼び出されます。No exception is thrown when the CreateType method is called.

  • 基本クラス、または何か他完全する場合は、基底クラスの既定のコンス トラクターを呼び出すだけでは複数の処理を実行するかの別のコンス トラクターを呼び出す既定のコンス トラクターは、使用する必要があります、 TypeBuilder.DefineConstructor 、1 つを作成する方法独自の実装を提供します。If you want a default constructor that does something more than simply calling the default constructor of the base class, or that calls another constructor of the base class, or that does something else entirely, you must use the TypeBuilder.DefineConstructor method to create one, and provide your own implementation.

DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][])

指定された属性、署名、およびカスタム修飾子で、型に新しいコンストラクターを追加します。Adds a new constructor to the type, with the given attributes, signature, and custom modifiers.

public:
 System::Reflection::Emit::ConstructorBuilder ^ DefineConstructor(System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, cli::array <Type ^> ^ parameterTypes, cli::array <cli::array <Type ^> ^> ^ requiredCustomModifiers, cli::array <cli::array <Type ^> ^> ^ optionalCustomModifiers);
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.Emit.ConstructorBuilder DefineConstructor (System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type[] parameterTypes, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers);
member this.DefineConstructor : System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type[] * Type[][] * Type[][] -> System.Reflection.Emit.ConstructorBuilder
Public Function DefineConstructor (attributes As MethodAttributes, callingConvention As CallingConventions, parameterTypes As Type(), requiredCustomModifiers As Type()(), optionalCustomModifiers As Type()()) As ConstructorBuilder

パラメーター

attributes
MethodAttributes MethodAttributes MethodAttributes MethodAttributes

コンストラクターの属性。The attributes of the constructor.

callingConvention
CallingConventions CallingConventions CallingConventions CallingConventions

コンストラクターの呼び出し規約。The calling convention of the constructor.

parameterTypes
Type[]

コンストラクターのパラメーター型。The parameter types of the constructor.

requiredCustomModifiers
Type[][]

型の配列の配列。An array of arrays of types. 型の各配列は、IsConst のような、対応するパラメーターの必須のカスタム修飾子を表します。Each array of types represents the required custom modifiers for the corresponding parameter, such as IsConst. 特定のパラメーターに必須のカスタム修飾子がない場合は、型の配列の代わりに null を指定します。If a particular parameter has no required custom modifiers, specify null instead of an array of types. どのパラメーターにも必須のカスタム修飾子がない場合は、配列の配列の代わりに null を指定します。If none of the parameters have required custom modifiers, specify null instead of an array of arrays.

optionalCustomModifiers
Type[][]

型の配列の配列。An array of arrays of types. 型の各配列は、IsConst のような、対応するパラメーターの省略可能なカスタム修飾子を表します。Each array of types represents the optional custom modifiers for the corresponding parameter, such as IsConst. 特定のパラメーターに省略可能なカスタム修飾子がない場合は、型の配列の代わりに null を指定します。If a particular parameter has no optional custom modifiers, specify null instead of an array of types. どのパラメーターにも省略可能なカスタム修飾子がない場合は、配列の配列の代わりに null を指定します。If none of the parameters have optional custom modifiers, specify null instead of an array of arrays.

戻り値

定義済みのコンストラクター。The defined constructor.

例外

requiredCustomModifiers または optionalCustomModifiers のサイズは parameterTypes のサイズと同じではありません。The size of requiredCustomModifiers or optionalCustomModifiers does not equal the size of parameterTypes.

型は CreateType() を使用して既に作成されました。The type was previously created using CreateType().

または-or- 現在の動的な型では、IsGenericType プロパティは true ですが、IsGenericTypeDefinition プロパティは false です。For the current dynamic type, the IsGenericType property is true, but the IsGenericTypeDefinition property is false.

注釈

このオーバー ロードは、マネージ コンパイラの設計者に提供されます。This overload is provided for designers of managed compilers.

注意

カスタム修飾子の詳細については、ECMA の第 2 部のメタデータ ドキュメントを参照してください。For more information on custom modifiers, see the ECMA Partition II Metadata documentation. ドキュメントはオンラインで入手できます。MSDN の「ECMA C# and Common Language Infrastructure Standards」 (ECMA の C# および共通言語基盤の標準規格) と、ECMA のインターナショナル Web サイトにある「Standard ECMA-335 - Common Language Infrastructure (CLI)」を参照してください。The documentation is available online; see ECMA C# and Common Language Infrastructure Standards on MSDN and Standard ECMA-335 - Common Language Infrastructure (CLI) on the Ecma International Web site.

適用対象