چرا #C از وراثت چندگانه (multiple inheritance) پشتیبانی نمی‌کند؟

در این مقاله قصد داریم درباره ی آنکه چرا سی شارپ از ارث بری چدگانه پشتیبانی نمیکند بحث کنیم که در زیر به شرح آن میپردازیم.ارث بری چند گانه به معنی آن است که یک کلاس از دو یا چند کلاس مشتق شده باشد.

 چرا #C از وراثت چندگانه (multiple inheritance) پشتیبانی نمی‌کند؟

خب چرا #C یا .NET از ارث بری چندگانه پشتیبانی نمیکند ؟

دو دلیل برای این کار وجود دارد که در زیر آن ها را برای شما بیان میکنیم .

فرض کنید که ما یک کلاس A داریم که دارای متدی با نام ()DoWork  دارد که virtual است. و از کلاس A دو کلاس دیگر به نام های Cو B مشتق شده است.

این سناریو خوب به نظر میرسد. اما فرض کنیدکه  ما کلاس دیگری ایجاد کرده ایم که از دو کلاس B , C ارث بری کرد است.

کد آن به صورت زیر میباشد :

public class Employee
    {
        public virtual void DoWork()
        {
            //Do work
        }
    }
 
    public class Manager:Employee
    {
        public override void DoWork()
        {
            //Manager's implementation of do work
        }
    }
 
    public class Developer : Employee
    {
        public override void DoWork()
        {
            //Deveoper's implementation of do work
        }
    }
 
    public class JuniorDeveloper:Manager, Developer// Compile Time Error :Cannot have multiple base classes but assume that it were possible
    {
 
    }

حال فرض کنید که ما یک متغییر از نوع Employee ایجاد کرده ایم که برابر با یک نمونه از شی  junior developer  است و تابع DoWork  را فراخوانی کرده است.

شی junior Developer در این که کدام تابع را اجرا کند دچار سردرگمی میشود.


Employee emp = new JuniorDeveloper();
emp.DoWork();

مورد دیگر این است که فرض کنید (Constructor)سازنده junior Developer ، سازنده (Constructor)کلاس base خود را فراخوانی کند.

public class JuniorDeveloper:Manager, Developer// Compile Time Error :Cannot have multiple base classes but assume that  it were possible
    {
        public JuniorDeveloper():base()
        {
 
        }
    }

در سناریو بالا (Constructor)سازنده ی junior Developer در این که کدام constructor را فراخوانی کند.دچار سردرگمی میشود زیرا که این کلاس از دو کلاس به ارث رسیده است.

نکات مهم : 

ارث بری چند گانه به دلایل زیر در سی شارپ استفاده نمیشود :

1- درک آن سخت است.

2- باعث به وجود آمدن اشکالات غیر قابل پیش بینی میشود.

3- debug کردن آنها مشکل است.

 به این دلیل است که در سی شارپ یک کلاس نمیتواند دو پدر داشته باشد و این مورد نیز در NET. نیز حذف شده است.

دانلود نسخه ی PDF این مطلب