簡體   English   中英

使用TypeBuilder通過構造函數從基本類型為字符串分配值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM