无法创建生成类型的实例:没有为此对象定义无参数构造函数

sil*_*der 0 .net c# reflection reflection.emit

我正在生成新的动态类型,并且不想创建它的实例.但是当实际创建实例化代码时,它会失败并出现异常: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.
Run Code Online (Sandbox Code Playgroud)

有什么问题?

D S*_*ley 6

您正在尝试创建一个实例ConstructorBuilder,而不是您生成的类.

我想你想要:

...
ConstructorBuilder cb = typeBlank.DefineDefaultConstructor(MethodAttributes.Public);
Type t = typeBlank.CreateType();
var item = Activator.CreateInstance(t);  
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下会创建无参数的默认构造函数; 除以下情况外,您不需要创建一个:

(来自MSDN):

由于默认构造函数是自动定义的,因此只有在以下情况下才需要调用此方法:

  • 您已经定义了另一个构造函数,并且您还需要一个只调用基类构造函数的默认构造函数.
  • 你想设置默认的构造比其他东西的属性PrivateScope,Public,HideBySig,SpecialName,和RTSpecialName.