A atribuição de valor a cadeia de caracteres a partir da base de dados de tipo através de construtor usando TypeBuilder

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

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu estou tentando programaticamente definir uma classe com uma classe base, e um construtor que chama o construtor base.Parte da subclasse construtor de trabalho é inicializar uma string chamada com um valor.Mas não importa o que eu tente nome permanece nulo.O construtor base funciona bem porque alguns arraylists são inicializados etc.Typesignature é uma seqüência de caracteres.O campo nome já existe na 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);
Foi útil?

Solução

O campo nome já existe na classe base.

Isso soa como você já tem o campo name na classe base.Se for esse o caso, o que o código faz é criar outro campo chamado name na classe derivada.Você, em seguida, escreva para esse campo, não para os da classe base.

O que você deve fazer é algo como:

FieldInfo nameField = tb.BaseType.GetField("name");

…

ctor1IL.Emit(OpCodes.Stfld, nameField);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top