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

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);
有帮助吗?

解决方案

字段名称已存在于基类中。

这听起来像你已经拥有了领域 name 基类中。如果是这样的话,你的代码所做的就是创建 另一个 被称为字段 name 在派生类中。然后写入该字段,而不是基类中的字段。

你应该做的是这样的:

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

…

ctor1IL.Emit(OpCodes.Stfld, nameField);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top