我正在生成新的动态类型,并且无法创建它的实例。但是当实际创建实例化代码时,它会失败,但例外情况是No parameterless constructor defined for this object.
我的代码如下:
AssemblyBuilder aBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("dfsdfsdf"), AssemblyBuilderAccess.Run);
ModuleBuilder mBuilder = aBuilder.DefineDynamicModule("dsadsadasdasda");
TypeBuilder typeBlank = mBuilder.DefineType("dasvvvvvvvv", TypeAttributes.Class | TypeAttributes.Public);
ConstructorBuilder cb = typeBlank.DefineDefaultConstructor(MethodAttributes.Public);
Type t = cb.GetType();
var item = Activator.CreateInstance(t); // <--- Error appear in this line.
那里有什么问题?
答案 0 :(得分:6)
您正在尝试创建ConstructorBuilder
的实例,而不是您生成的类。
我想你想要:
...
ConstructorBuilder cb = typeBlank.DefineDefaultConstructor(MethodAttributes.Public);
Type t = typeBlank.CreateType();
var item = Activator.CreateInstance(t);
请注意,默认情况下会创建无参数的默认构造函数;除以下情况外,您不需要创建一个:
(来自MSDN):
因为默认构造函数是自动定义的,所以它是 仅在以下情况下调用此方法所必需的:
- 您已经定义了另一个构造函数,并且您还需要一个只调用基类构造函数的默认构造函数。
- 您希望将默认构造函数的属性设置为
PrivateScope
,Public
,HideBySig
,SpecialName
以外的其他属性, 和RTSpecialName
。