![](/img/trans.png)
[英]Using TypeBuilder to create a pass-through constructor for the base class
[英]Assigning value to string from base type through constructor using TypeBuilder
我試圖以編程方式定義一個具有基類的類,以及一個調用基類構造函數的構造函數。 子類構造函數的一部分工作是使用值初始化名為name的字符串。 但是,無論我嘗試使用什么名稱,都保持為空。 基本構造函數可以正常工作,因為某些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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.