Assegnazione del valore alla stringa dal tipo di base attraverso il costruttore utilizzando TypeBuilder
-
21-12-2019 - |
Domanda
Sto cercando di definire la definizione a livello di codice con una classe base e un costruttore che chiama il costruttore di base.Parte del lavoro del costruttore della sottoclasse è di inizializzare una stringa chiamata nome con un valore.Ma non importa quello che provo il nome rimane null.Il costruttore di base funziona bene perché alcuni arrayList sono inizializzati, ecc. La documentazione è una stringa.Il nome del campo esiste già nella classe base.
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);
. Soluzione
.Il nome del campo esiste già nella classe base.
Sembra che tu abbia già il campo name
nella classe base.Se è così, qual è il tuo codice è creare un altro campo chiamato name
nella classe derivata.Quindi scrivi a quel campo, non a quello nella classe base.
Cosa dovresti fare è tipo come:
FieldInfo nameField = tb.BaseType.GetField("name");
…
ctor1IL.Emit(OpCodes.Stfld, nameField);
.