使用TypeBuilder通过构造函数将值从基类型赋值给字符串

时间:2014-06-03 18:33:59

标签: c# il typebuilder

我试图以编程方式定义一个具有基类的类,以及一个调用基本构造函数的构造函数。子类构造函数的部分工作是使用值初始化名为name的字符串。但无论我尝试什么名称仍然是null。基础构造函数工作正常,因为一些arraylists被初始化等.Natureignature是一个字符串。字段名已存在于基类中。

FieldBuilder fbname = tb.DefineField("name", typeof(string), FieldAttributes.Public);

ILGenerator ctor1IL = ctor1.GetILGenerator();
ctor1IL.Emit(OpCodes.Ldarg_0);

//get base constructor
var bc = tb.BaseType.GetConstructor(System.Type.EmptyTypes);
ctor1IL.Emit(OpCodes.Call, bc);  
ctor1IL.Emit(OpCodes.Ldarg_0);
ctor1IL.Emit(OpCodes.Ldstr, typeSignature);
ctor1IL.Emit(OpCodes.Stfld, fbname);
ctor1IL.Emit(OpCodes.Ret);

1 个答案:

答案 0 :(得分:1)

  

字段名已存在于基类中。

这听起来你已经在基类中有了字段name。如果是这种情况,那么您的代码所做的就是在派生类中创建名为name另一个字段。然后写入该字段,而不是写入基类中的字段。

你应该做的是:

FieldInfo nameField = tb.BaseType.GetField("name");

…

ctor1IL.Emit(OpCodes.Stfld, nameField);