TypeBuilder를 사용하여 생성자를 통해 기본 유형에서 문자열 값 할당

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

  •  21-12-2019
  •  | 
  •  

문제

나는 기본 클래스로 클래스를 프로그래밍 방식으로 정의하고 기본 생성자를 호출하는 생성자를 프로그래밍 방식으로 정의하려고합니다.하위 클래스 생성자의 작업 부분은 값을 사용하여 이름이라는 문자열을 초기화하는 것입니다.그러나 내가 무엇을 시도하는지 상관없이 null은 null로 남아 있습니다.기본 생성자는 일부 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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top