【问题标题】:Assigning value to string from base type through constructor using TypeBuilder使用 TypeBuilder 通过构造函数从基本类型为字符串赋值
【发布时间】:2014-06-03 18:33:58
【问题描述】:

我正在尝试以编程方式定义一个具有基类的类和一个调用基构造函数的构造函数。子类构造函数的一部分工作是用一个值初始化一个名为 name 的字符串。但无论我尝试什么,名称仍然为空。基本构造函数工作正常,因为一些数组列表已初始化等。 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);

【问题讨论】:

    标签: c# il typebuilder


    【解决方案1】:

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

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

    你应该做的是:

    FieldInfo nameField = tb.BaseType.GetField("name");
    
    …
    
    ctor1IL.Emit(OpCodes.Stfld, nameField);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2015-07-23
      • 2017-10-06
      • 1970-01-01
      • 2014-02-23
      • 2014-11-21
      • 2013-07-03
      相关资源
      最近更新 更多