سؤال

لقد حاولت فهم بعض مشاركات مماثلة، ولكن لا أفهم أغراضها وفكرت في أن أشرح بلدي ...

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

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، وتحتوي على جميع طرق الفضلات.

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