Assegnazione del valore alla stringa dal tipo di base attraverso il costruttore utilizzando TypeBuilder

StackOverflow https://stackoverflow.com//questions/24022452

  •  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);
.

È stato utile?

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);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top