سؤال

لدي فصل واحد يسمى A و One Class B

public class A : UserControl { }

public class B : UserControl { }

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

لكني أريد تزويد كائناتي من الفئة B لأنه مخصص قليلاً. كن مطمئنًا أنه يحتوي على جميع خصائص الفئة A. كيف يمكنني تكوين هدف الفئة B الخاصة بي حتى أتمكن من دمج مجموعة الطرف الثالث في مشروعي بالإضافة إلى تخصيص المظهر والشعور وفقًا لاحتياجاتي؟

إذا كنت مثل شيء مثل (A)objB غير مسموح به. ثم جربت هذا:

UserControl control = objB as UserControl;

A objA = control as A;

لكن المشكلة في هذه الحالة هي Obja خالية.

لتجنب الالتباس: يتم توفير الفئة A والتجميع من قبل الطرف الثالث.

شكرا مقدما :)

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

المحلول

بالنظر إلى التسلسل الهرمي الخاص بك ، سيكون عليك كتابة مشغل تحويل. لا توجد طريقة مدمجة للقيام بذلك بشكل عام (فكر Dog : Animal و Cat : Animal):

public static explicit operator A(B b) {
    // code to populate a new instance of A from b
}

يمكنك أيضًا استخدام إطار انعكاس عام والقيام بشيء مثل

public static void PropertyCopyTo<TSource, TDesination>(
    this TSource source,
    TDestination destination
) {
    // details elided
}

إذن يمكنك أن تقول

// b is B
// a is A
b.PropertyCopyTo<A>(a);

التي من شأنها نسخ جميع الخصائص المشتركة بين b إلى a.

نصائح أخرى

إلى عن على B لتكون قابلة للتشكيل إلى أ A, B يجب وراثة A. حتى لو B يحتوي على جميع خصائص A, ، لا يزال ليس A.

يمكنك استخدام نمط محول

انظر هنا

إذا كان لا يمكن إلقاء B على (كما في B is A) لا يمكن تحقيق ما تحاول القيام به دون أن ترث من A. لسوء الحظ لا يدعم C# كتابة البط على عكس العديد من اللغات الديناميكية (أي روبي).

يمكنك أن ترث من الفئة أ:

public class B : A {
}

وإذا كنت بحاجة إلى تجاوز بعض الأساليب/الخصائص ، فقم بتعيينها على virtual في الفئة أ

أعتقد أنك في الواقع لا تستطيع فعل ذلك.

لماذا لا تضيف خصائصك إلى فئة A جزئية؟

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