الشبكة العربية لمطوري الألعاب

خبير  سعيد بسيوني مشاركة 1

لقد تفاجئت أنه لا يوجد وراثة متعددة في الـ #C مثل في ++C...
ما الحل؟ هل يوجد حل غير عمل شجرة طويلة من أجل الوراثة من مثلاً ثلاث كلاسات مثلاً؟

خبير  Mohammad Khashashneh مشاركة 2

Simplicity, I never used it in my whole life. But that is not enough to drop a concept completely from a language isn’t it?

There are some situations that can cause ambiguity if one used multiple inheritance. Such a situation is the famous diamond problem. Its about a class that inherits 2 classes that share the same parent class. Example:
D inherits from B and C. Both B and C inherit from A

A
B C
D


This will make any call from D to a method or data implemented in both B & C ambiguous! you don’t know which one to call, Bs implementation or Cs

However, it’s ok using Mult. Inh. with interfaces and complete abstract classes, where there are no implementation exist in the whole chain ( or tree ) .
By the way, I never used C#, this is in C++ so I guess this is the main reason why they dropped this issue in C#.


I hope my explanation is not as ambiguous as the diamond problem☺

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

مبتدئ  حسن عارف عبد الرحمن مشاركة 3

التعليق على مشاركة سعيد بسيوني في Aug 29, 2005 2:14 :

> لقد تفاجئت أنه لا يوجد وراثة متعددة في الـ #C مثل في
> ++C...
> ما الحل؟ هل يوجد حل غير عمل شجرة طويلة من أجل
> الوراثة من مثلاً ثلاث كلاسات مثلاً؟


لماذا تريد وراثة متعددة؟
هناك الكثير من الناس اللذين يعتقدون انك لو استخدمت الوراثة المتعددة فهذا يعني ان هناك مشكلة في تصميمك للبرنامج.

انا لم اشتغل على #C بل على Java, و لكن كلا منهما لا يدعم الوراثة المتعددة و لكنه يدعم الـ interfaces

على كل حال, ما هي المشكلة اللتي تريد حلها بالوراثة المتعددة؟

--
حسن
hasenj

خبير  Mohammad Khashashneh مشاركة 4

Oh, Yes It was first removed from JAVA. Actually I read about the diamond problem in a JAVA website.

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

خبير  سعيد بسيوني مشاركة 5

نعم. أنا أحتاج الوراثة من class عادي وعدة classes مجردة (abstract). الـ interfaces تحل هزه المشكلة... شكرا لزكر الموضوع..