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)
有什么问题?
您正在尝试创建一个实例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.
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |