TypeBuilder.DefineConstructor メソッド

定義

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

オーバーロード

DefineConstructor(MethodAttributes, CallingConventions, Type[])

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

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[])

型に、指定した属性およびシグネチャの新しいコンストラクターを追加します。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

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

callingConvention
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 を使用して、動的な型にコンストラクターの特定のシグネチャと属性を設定し、MSIL の作成に対応する ConstructorBuilder を返す方法を示します。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 parameterless constructor is provided automatically, and it calls the parameterless constructor of the base class.

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

  • 基底クラスのパラメーターなしのコンストラクターを呼び出すだけのパラメーターなしのコンストラクターが必要な場合は、DefineDefaultConstructor メソッドを使用して作成できます (必要に応じてアクセスを制限することもできます)。If you want a parameterless constructor that simply calls the parameterless 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 parameterless constructor. この場合、コンストラクターを使用しようとすると例外がスローされます。If you do, an exception is thrown when you try to use the constructor. @No__t-0 メソッドが呼び出された場合、例外はスローされません。No exception is thrown when the CreateType method is called.

  • パラメーターなしのコンストラクターが基底クラスのパラメーターなしのコンストラクターを呼び出すだけでなく、基底クラスの別のコンストラクターを呼び出すか、またはその他の処理をまったく行う必要がある場合は、TypeBuilder.DefineConstructor メソッドを使用してを作成する必要があります。1つで、独自の実装を提供します。If you want a parameterless constructor that does something more than simply calling the parameterless 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[][])

指定された属性、署名、およびカスタム修飾子で、型に新しいコンストラクターを追加します。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

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

callingConvention
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 Partition II メタデータのドキュメントを参照してください。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.

適用対象