إنشاء نوع مشتق من الفصل في وقت التشغيل
-
16-09-2019 - |
سؤال
لقد حاولت فهم بعض مشاركات مماثلة، ولكن لا أفهم أغراضها وفكرت في أن أشرح بلدي ...
لدي فئة - محددة بالكامل برمز مع الخصائص والأساليب. العديد من الطرق افتراضية لتغلبها عن طريق مزيد من الفئة المشتقة. لذلك، لدي شيء مثل ما يلي
Class_Main
-- Class_A : Class_Main
-- Class_B : Class_Main
-- Class_C : Class_Main
-- Class_D : Class_Main
أحتاج إلى تحديد فئة أخرى يمكن أن تكون مستمدة ديناميكيا من الإعلان ... مثل:
Class_X : Class_A (or Class_B or Class_C or Class_D )
كما لدي خصائص وأساليب إضافية داخل class_x. نظرا لأن C # لا يمكن أن تستمد من فئتين فعليين، ولكن يمكن استخدام واجهات، ولكن لا يمكنك الحصول على رمز في واجهة، فقط التوقيعات المجردة، كيف يمكنني القيام بهذا التنفيذ.
شكرًا
المحلول
ما تصفه الأصوات مثل قليلا طب الكتابة. وبعد هذا غير متاح في C #، لأنها لغة مكتوبة ثابتة. ربما عندما يأتي C # 4 حولها، dynamic
سوف أعطيك ما تبحث عنه.
لو Class_X
يجب أن تكون "مليئة" بوظائف من تلك الفصول، سيكون من الشائع أن تمرذا في الفصل في وقت مثيل:
public class Class_X {
private Class_Main _impl;
public Class_X(Class_Main impl) {
_impl = impl;
}
}
Class_X classXA = new Class_X(new Class_A());
Class_X classXB = new Class_X(new Class_B());
في هذه المرحلة، الخاص بك Class_X
الحالات الحصول على الوصول إلى Class_Main
خصائص وطرق لجميع الفئات المشتقة. هذا لا يجعل Class_X
إجمالي، يمكنك فقط من استخدام سلوك وقت التشغيل من أي Class_Main
من داخل Class_X
(عبر ال _impl
هدف).
نصائح أخرى
تمتد من فئة واحدة وتشمل الطبقة الأخرى داخل الفصل X، ولديك طرق محول للخريطة مباشرة إلى الفصل الداخلي.
لذلك، الآن بالضبط C #، فقط النماذج الأولية:
class ClassA {
public void FunctionClassA(...) { ... }
public void FunctionClassB(...) { ... }
}
class ClassX : ClassB {
private ClassA classa;
public ClassX() {
classa = new ClassA();
}
public void FunctionClassA(...) { classa.FunctionClassA(...); }
}
لذلك، تحتوي ClassX الآن على وظيفة واحدة موروثة (حسب المظهر) من Classa، وتحتوي على جميع طرق الفضلات.