سؤال

في المثال التالي، يمكنني إنشاء كائن ديناميكيا عبر سلسلة؛ ومع ذلك، ليس لدي أي طريقة للحصول على الأساليب العامة للفئة الأساسية. لا أستطيع وضع OBJ إلى قاعدة لأنني لا أعرف ما العام الذي سيتم استخدامه في وقت التصميم. أي اقتراحات حول القيام بذلك في وقت التشغيل سيكون لطيفا.

مشروع A يحتوي على فئة A {T، J>: Base {t، j>
يحتوي Project B على فئة B {t، j>: base {t، j>

يحتوي المشروع C على قاعدة الفصل {t، j>
السيطرة الافتراضية العامة {t، j> البند

مشروع ويندوز المشروع
حدث cmdgo_click.

سلسلة DLL = TextBox1.Text // EX "projecta.dll"
سلسلة سلسلة = TextBox2.Text // السابقين "A`2 [enut، enuj]
كائن OBJ = Activator.createInstanceمن (DLL، فئة)

هل كانت مفيدة؟

المحلول

في مدة العرض لا يهم الجزء الرئيسي من المعادلة، لأن التحويل البرمجي قد شغل بالفعل الفجوات للتنفيذ العام. أعتقد أنه يمكنك استخدام التفكير في الأساليب الأساسية، كما هو الحال في هذا المثال أدناه، آمل أن يساعد هذا.

MethodInfo[] baseMethods = obj.GetType().BaseType.GetMethods();
object retObj = baseMethods[0].Invoke(obj, new object[] {"paramVal1", 3, "paramVal3"});

نصائح أخرى

هذا الرمز يخلق مثيل للقاعدةu003Cint, string> في

Type type = typeof(BASE<,>).MakeGenericType(typeof(int), typeof(string));
object instance = Activator.CreateInstance(type);

إذا كنت لا تعرف معلمات النوع المستخدمة في وقت التشغيل، فلن تتمكن من استخدام أي عمليات تعتمد على هذه الأنواع أيضا، لذلك ... لماذا لا تجعل فئة قاعدة غير عامة ل BASE يحتوي على جميع العمليات التي لا تعتمد على المعلمات العامة، ثم يمكنك القضية obj إلى هذا النوع الأساسي واستخدامها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top