TypeBuilder.DefineConstructor Metodo

Definizione

Aggiunge un nuovo costruttore al tipo dinamico.Adds a new constructor to the dynamic type.

Overload

DefineConstructor(MethodAttributes, CallingConventions, Type[])

Aggiunge un nuovo costruttore al tipo, con la firma e gli attributi specificati.Adds a new constructor to the type, with the given attributes and signature.

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

Aggiunge un nuovo costruttore al tipo, con gli attributi specificati, la firma e i modificatori personalizzati.Adds a new constructor to the type, with the given attributes, signature, and custom modifiers.

DefineConstructor(MethodAttributes, CallingConventions, Type[])

Aggiunge un nuovo costruttore al tipo, con la firma e gli attributi specificati.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);
public System.Reflection.Emit.ConstructorBuilder DefineConstructor (System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, 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

Parametri

attributes
MethodAttributes

Attributi del costruttore.The attributes of the constructor.

callingConvention
CallingConventions

Convenzione di chiamata del costruttore.The calling convention of the constructor.

parameterTypes
Type[]

Tipi di parametro del costruttore.The parameter types of the constructor.

Restituisce

Costruttore definito.The defined constructor.

Attributi

Eccezioni

Il tipo è stato creato in precedenza usando CreateType().The type was previously created using CreateType().

Esempi

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di DefineConstructor per impostare la firma e gli attributi specifici di un costruttore su un tipo dinamico e restituire una ConstructorBuilder corrispondente per il popolamento 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)

Commenti

Se non si definisce un costruttore per il tipo dinamico, viene fornito automaticamente un costruttore senza parametri e viene chiamato il costruttore senza parametri della classe di base.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.

Se si definisce un costruttore per il tipo dinamico, non viene fornito un costruttore senza parametri.If you define a constructor for your dynamic type, a parameterless constructor is not provided. Sono disponibili le opzioni seguenti per fornire un costruttore senza parametri oltre al costruttore definito:You have the following options for providing a parameterless constructor in addition to the constructor you defined:

  • Se si vuole un costruttore senza parametri che chiama semplicemente il costruttore senza parametri della classe base, è possibile usare il metodo DefineDefaultConstructor per crearne uno (e, facoltativamente, limitarne l'accesso).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). Non fornire un'implementazione per questo costruttore senza parametri.Do not provide an implementation for this parameterless constructor. In tal caso, viene generata un'eccezione quando si tenta di utilizzare il costruttore.If you do, an exception is thrown when you try to use the constructor. Quando viene chiamato il metodo CreateType, non viene generata alcuna eccezione.No exception is thrown when the CreateType method is called.

  • Se si desidera un costruttore senza parametri che esegue un'operazione più che semplicemente chiamando il costruttore senza parametri della classe base o che chiama un altro costruttore della classe di base o che esegue un'altra operazione completamente, è necessario utilizzare il metodo TypeBuilder.DefineConstructor per crearne uno e fornire un'implementazione personalizzata.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[][])

Aggiunge un nuovo costruttore al tipo, con gli attributi specificati, la firma e i modificatori personalizzati.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);
public System.Reflection.Emit.ConstructorBuilder DefineConstructor (System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type[] parameterTypes, Type[][] requiredCustomModifiers, 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

Parametri

attributes
MethodAttributes

Attributi del costruttore.The attributes of the constructor.

callingConvention
CallingConventions

Convenzione di chiamata del costruttore.The calling convention of the constructor.

parameterTypes
Type[]

Tipi di parametro del costruttore.The parameter types of the constructor.

requiredCustomModifiers
Type[][]

Matrice di matrici di tipi.An array of arrays of types. Ogni matrice di tipi rappresenta i modificatori personalizzati obbligatori per il parametro corrispondente, come IsConst.Each array of types represents the required custom modifiers for the corresponding parameter, such as IsConst. Se un parametro particolare non ha modificatori personalizzati obbligatori, specificare null invece di una matrice di tipi.If a particular parameter has no required custom modifiers, specify null instead of an array of types. Se nessun parametro ha modificatori personalizzati obbligatori, specificare null invece di una matrice di matrici.If none of the parameters have required custom modifiers, specify null instead of an array of arrays.

optionalCustomModifiers
Type[][]

Matrice di matrici di tipi.An array of arrays of types. Ogni matrice di tipi rappresenta i modificatori personalizzati facoltativi per il parametro corrispondente, come IsConst.Each array of types represents the optional custom modifiers for the corresponding parameter, such as IsConst. Se un parametro particolare non ha modificatori personalizzati facoltativi, specificare null invece di una matrice di tipi.If a particular parameter has no optional custom modifiers, specify null instead of an array of types. Se nessun parametro ha modificatori personalizzati facoltativi, specificare null invece di una matrice di matrici.If none of the parameters have optional custom modifiers, specify null instead of an array of arrays.

Restituisce

Costruttore definito.The defined constructor.

Attributi

Eccezioni

La dimensione di requiredCustomModifiers o optionalCustomModifiers non è uguale a quella di parameterTypes.The size of requiredCustomModifiers or optionalCustomModifiers does not equal the size of parameterTypes.

Il tipo è stato creato in precedenza usando CreateType().The type was previously created using CreateType().

-oppure--or- Per il tipo dinamico corrente, la proprietà IsGenericType è true ma la proprietà IsGenericTypeDefinition è false.For the current dynamic type, the IsGenericType property is true, but the IsGenericTypeDefinition property is false.

Commenti

Questo overload viene fornito per le finestre di progettazione dei compilatori gestiti.This overload is provided for designers of managed compilers.

Nota

Per ulteriori informazioni sui modificatori personalizzati, vedere la documentazione dei metadati ECMA Partition II.For more information on custom modifiers, see the ECMA Partition II Metadata documentation. La documentazione è disponibile online; vedere ECMA C# and Common Language Infrastructure Standards (ECMA C# e standard di Common Language Infrastructure) in MSDN e Standard ECMA-335 - Common Language Infrastructure (CLI) nel sito Web internazionale Ecma.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.

Si applica a