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 для задания определенной сигнатуры и атрибутов конструктора для динамического типа и возврата соответствующего 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 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. При вызове метода CreateType исключение не создается.No exception is thrown when the CreateType method is called.

  • Если нужен конструктор без параметров, который выполняет нечто большее, чем просто вызов конструктора без параметров базового класса или вызовет другой конструктор базового класса или который полностью делает что-то еще, необходимо использовать метод TypeBuilder.DefineConstructor для создания один и предоставить собственную реализацию.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. Документация доступна в Интернете; см. страницы ECMAC# и стандарты Common Language Infrastructure на сайте MSDN и Стандарт ECMA-335 — общеязыковая инфраструктура (CLI) на международном веб-сайте организации 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.

Применяется к