تعيين قيمة للسلسلة من النوع الأساسي من خلال المُنشئ باستخدام TypeBuilder

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

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول تحديد فئة برمجيًا بفئة أساسية ومنشئ يستدعي المنشئ الأساسي.جزء من مهمة مُنشئ الفئة الفرعية هو تهيئة سلسلة تسمى الاسم بقيمة.ولكن مهما حاولت فإن الاسم يظل فارغًا.يعمل المنشئ الأساسي بشكل جيد لأنه تتم تهيئة بعض قوائم المصفوفات وما إلى ذلك.نوع التوقيع هو سلسلة.اسم الحقل موجود بالفعل في الفئة الأساسية.

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