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

时间:2016-04-27 13:42:58

标签: c# .net 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.

那里有什么问题?

1 个答案:

答案 0 :(得分:6)

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

我想你想要:

...
ConstructorBuilder cb = typeBlank.DefineDefaultConstructor(MethodAttributes.Public);
Type t = typeBlank.CreateType();
var item = Activator.CreateInstance(t);  

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

(来自MSDN):

  

因为默认构造函数是自动定义的,所以它是   仅在以下情况下调用此方法所必需的:

     
      
  • 您已经定义了另一个构造函数,并且您还需要一个只调用基类构造函数的默认构造函数。
  •   
  • 您希望将默认构造函数的属性设置为PrivateScopePublicHideBySigSpecialName以外的其他属性,   和RTSpecialName
  •