TypeBuilder.DefineConstructor 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将新的构造函数添加到动态类型。
重载
DefineConstructor(MethodAttributes, CallingConventions, Type[]) |
用给定的属性和签名,向类型中添加新的构造函数。 |
DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) |
将新构造函数添加到该类型,其属性、签名和自定义修饰符已给定。 |
DefineConstructor(MethodAttributes, CallingConventions, Type[])
- Source:
- TypeBuilder.cs
- Source:
- TypeBuilder.cs
- Source:
- TypeBuilder.cs
用给定的属性和签名,向类型中添加新的构造函数。
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);
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
参数
- attributes
- MethodAttributes
构造函数的属性。
- callingConvention
- CallingConventions
构造函数的调用约定。
- parameterTypes
- Type[]
构造函数的参数类型。
返回
定义构造函数。
- 属性
例外
该类型是以前使用 CreateType() 创建的。
示例
下面的代码示例演示了如何使用 DefineConstructor
在动态类型上设置构造函数的特定签名和属性,并返回对应于 ConstructorBuilder MSIL 填充的 。
// 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)
注解
如果未为动态类型定义构造函数,则会自动提供无参数构造函数,并调用基类的无参数构造函数。
如果为动态类型定义构造函数,则不会提供无参数构造函数。 除了定义的构造函数之外,还可以使用以下选项来提供无参数构造函数:
如果需要一个只调用基类的无参数构造函数的无参数构造函数,可以使用 DefineDefaultConstructor 方法创建一个 (,并选择性地限制对它的访问) 。 不要为此无参数构造函数提供实现。 如果这样做,则在尝试使用 构造函数时会引发异常。 调用 方法时 CreateType 不会引发异常。
如果想要一个无参数构造函数,它不只是调用基类的无参数构造函数,或者调用基类的另一个构造函数,或者完全执行其他操作,则必须使用 TypeBuilder.DefineConstructor 方法来创建一个,并提供你自己的实现。
适用于
DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][])
- Source:
- TypeBuilder.cs
- Source:
- TypeBuilder.cs
- Source:
- TypeBuilder.cs
将新构造函数添加到该类型,其属性、签名和自定义修饰符已给定。
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);
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
[<System.Runtime.InteropServices.ComVisible(true)>]
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
构造函数的属性。
- callingConvention
- CallingConventions
构造函数的调用约定。
- parameterTypes
- Type[]
构造函数的参数类型。
- requiredCustomModifiers
- Type[][]
由类型数组组成的数组。 每个类型数组均表示相应参数所必需的自定义修饰符,如 IsConst。 如果某个特定参数没有所需的自定义修饰符,则指定 null
,而不要指定类型数组。 如果所有参数都没有所需的自定义修饰符,则指定 null
,而不要指定由数组组成的数组。
- optionalCustomModifiers
- Type[][]
由类型数组组成的数组。 每个类型数组均表示相应参数的可选自定义修饰符,如 IsConst。 如果某个特定参数没有可选的自定义修饰符,则指定 null
,而不要指定类型数组。 如果所有参数都没有可选的自定义修饰符,则指定 null
,而不要指定由数组组成的数组。
返回
定义构造函数。
- 属性
例外
requiredCustomModifiers
或 optionalCustomModifiers
的大小与 parameterTypes
的大小不相等。
该类型是以前使用 CreateType() 创建的。
- 或 -
对于当前的动态类型,属性 IsGenericType 的值为 true
,但属性 IsGenericTypeDefinition 的值为 false
。
注解
此重载是为托管编译器的设计人员提供的。
注意
有关自定义修饰符的详细信息,请参阅 ECMA C# 和公共语言基础结构标准 以及 标准 ECMA-335 - 公共语言基础结构 (CLI) 。