تعيين قيمة للسلسلة من النوع الأساسي من خلال المُنشئ باستخدام TypeBuilder
-
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);
لا تنتمي إلى StackOverflow