TypeBuilder.DefineConstructor Methode

Definition

Fügt dem dynamischen Typ einen neuen Konstruktor hinzu.

Überlädt

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

Fügt dem Typ einen neuen Konstruktor mit den angegebenen Attributen und Signaturen hinzu.

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

Fügt dem Typ einen neuen Konstruktor mit den angegebenen Attributen, Signaturen und benutzerdefinierten Modifizierern hinzu.

DefineConstructor(MethodAttributes, CallingConventions, Type[])

Fügt dem Typ einen neuen Konstruktor mit den angegebenen Attributen und Signaturen hinzu.

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
[<System.Runtime.InteropServices.ComVisible(true)>]
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

Parameter

attributes
MethodAttributes

Die Attribute des Konstruktors.

callingConvention
CallingConventions

Die Aufrufkonvention des Konstruktors.

parameterTypes
Type[]

Die Parametertypen des Konstruktors.

Gibt zurück

Der definierte Konstruktor.

Attribute

Ausnahmen

Der Typ wurde zuvor mit CreateType().

Beispiele

Im folgenden Codebeispiel wird die Verwendung der DefineConstructor speziellen Signatur und Attribute eines Konstruktors für einen dynamischen Typ veranschaulicht und eine entsprechende ConstructorBuilder MSIL-Population zurückgegeben.

// 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)

Hinweise

Wenn Sie keinen Konstruktor für ihren dynamischen Typ definieren, wird automatisch ein parameterloser Konstruktor bereitgestellt, und er ruft den parameterlosen Konstruktor der Basisklasse auf.

Wenn Sie einen Konstruktor für den dynamischen Typ definieren, wird kein parameterloser Konstruktor bereitgestellt. Sie haben die folgenden Optionen zum Bereitstellen eines parameterlosen Konstruktors zusätzlich zum von Ihnen definierten Konstruktor:

  • Wenn Sie einen parameterlosen Konstruktor benötigen, der einfach den parameterlosen Konstruktor der Basisklasse aufruft, können Sie die DefineDefaultConstructor Methode verwenden, um einen zu erstellen (und optional den Zugriff darauf einzuschränken). Stellen Sie keine Implementierung für diesen parameterlosen Konstruktor bereit. Wenn Sie dies tun, wird eine Ausnahme ausgelöst, wenn Sie versuchen, den Konstruktor zu verwenden. Es wird keine Ausnahme ausgelöst, wenn die CreateType Methode aufgerufen wird.

  • Wenn Sie einen parameterlosen Konstruktor benötigen, der nicht nur den parameterlosen Konstruktor der Basisklasse aufruft oder einen anderen Konstruktor der Basisklasse aufruft oder das etwas anderes erledigt, müssen Sie die TypeBuilder.DefineConstructor Methode verwenden, um einen zu erstellen und eine eigene Implementierung bereitzustellen.

Gilt für:

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

Fügt dem Typ einen neuen Konstruktor mit den angegebenen Attributen, Signaturen und benutzerdefinierten Modifizierern hinzu.

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);
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)>]
member this.DefineConstructor : System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type[] * Type[][] * Type[][] -> System.Reflection.Emit.ConstructorBuilder
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

Parameter

attributes
MethodAttributes

Die Attribute des Konstruktors.

callingConvention
CallingConventions

Die Aufrufkonvention des Konstruktors.

parameterTypes
Type[]

Die Parametertypen des Konstruktors.

requiredCustomModifiers
Type[][]

Ein Array von Arrays von Typen. Jedes Array von Typen stellt die erforderlichen benutzerdefinierten Modifizierer für den entsprechenden Parameter dar, z IsConst. B. . Wenn ein bestimmter Parameter keine erforderlichen benutzerdefinierten Modifizierer aufweist, geben Sie anstelle null eines Arrays von Typen an. Wenn keine der Parameter über erforderliche benutzerdefinierte Modifizierer verfügt, geben Sie null anstelle eines Arrays von Arrays an.

optionalCustomModifiers
Type[][]

Ein Array von Arrays von Typen. Jedes Array von Typen stellt die optionalen benutzerdefinierten Modifizierer für den entsprechenden Parameter dar, z IsConst. B. . Wenn ein bestimmter Parameter keine optionalen benutzerdefinierten Modifizierer enthält, geben Sie anstelle null eines Arrays von Typen an. Wenn keines der Parameter über optionale benutzerdefinierte Modifizierer verfügt, geben Sie null anstelle eines Arrays von Arrays an.

Gibt zurück

Der definierte Konstruktor.

Attribute

Ausnahmen

Die Größe von requiredCustomModifiers oder optionalCustomModifiers entspricht nicht der Größe von parameterTypes.

Der Typ wurde zuvor mit CreateType().

-oder-

Für den aktuellen dynamischen Typ ist die IsGenericType Eigenschaft , aber die IsGenericTypeDefinition Eigenschaft ist false.true

Hinweise

Diese Überladung wird für Designer von verwalteten Compilern bereitgestellt.

Note

Weitere Informationen zu benutzerdefinierten Modifizierern finden Sie unter ECMA C# und Common Language Infrastructure Standards und Standard ECMA-335 – Common Language Infrastructure (CLI).

Gilt für: