ارث بری در سی شارپ Inheritance — معرفی ۵ نوع ارث بری

تصویر شاخص ارث بری در سی شارپ

در زبان برنامه‌نویسی سی‌شارپ، ارث‌بری نقش مهمی در ساختاردهی کد و مدیریت بهتر پروژه‌ها ایفا می‌کند. از ارث‌بری تک‌سطحی گرفته تا ارث‌بری ترکیبی، انواع مختلف ارث بری در سی شارپ به برنامه‌نویسان کمک می‌کنند تا کدهای قابل فهم‌تر، کارآمدتر و با قابلیت نگهداری بالاتر بنویسند. در این مقاله از مجموعه مقالات آموزشی پی استور به بررسی انواع ارث بری در سی شارپ، مفاهیم مرتبط با آن، مزایا و معایب این موضوع مهم می‌پردازیم.

ارث بری در سی شارپ چیست؟

ارث بری در سی شارپ یک مفهوم اساسی در برنامه‌نویسی شیء‌گرا است که که امکان استفاده مجدد از کد، گسترش ویژگی‌ها و بهبود سازمان‌دهی برنامه‌ها را فراهم می‌کند. این مفهوم به یک کلاس فرزند اجازه می‌دهد ویژگی‌ها و متدهای کلاس والد را به ارث ببرد. کلاس جدید ویژگی‌ها و متدهای کلاس موجود را به ارث می‌برد و می‌تواند ویژگی‌ها و متدهای جدیدی نیز به آن اضافه کند. ارث‌بری باعث استفاده مجدد از کد، ساده‌تر شدن نگهداری کد و بهبود سازمان‌دهی کد می‌شود.

ساختار یا نحو ارث بری در سی شارپ

برای ایجاد ارث‌بری در سی‌شارپ، کلاس فرزند باید پس از نام کلاس والد از علامت : استفاده کند. ساختار ارث بری در سی شارپ به صورت زیر است:

class derived-class : parent-class  
{  
     // methods and fields  
}

کلاس مشتق‌شده: کلاسی که از کلاس دیگری ارث‌بری می‌کند، به عنوان کلاس فرزند (یا کلاس مشتق‌شده، کلاس توسعه‌یافته یا کلاس زیرمجموعه) شناخته می‌شود. کلاس فرزند می‌تواند علاوه بر ویژگی‌ها و متدهای کلاس والد، فیلدها و متدهای خود را نیز اضافه کند.

کلاس والد: کلاسی که ویژگی‌های آن به ارث برده می‌شود، به عنوان کلاس والد (یا کلاس پایه یا کلاس ابر) شناخته می‌شود.

مثال ارث بری در سی شارپ

تکه کد زیر نمونه‌ای از ارث بری در سی شارپ است. در این کد یک کلاس پایه (PgS) داریم که دارای ویژگی‌ها و متدی است، و سپس یک کلاس مشتق شده (ProgramStore) که از کلاس پایه ارث می‌برد. در مثال زیر، کد نحوه استفاده از ارث‌بری و دسترسی به متدها و ویژگی‌های کلاس پایه از طریق کلاس مشتق شده را نشان می‌دهد.

// Demonstration of Inheritance
using System;

// Base class
class PgS 
{
    // Data members
    public string name;
    public string subject;

    public void readers(string name, string subject)
    {
        this.name = name;
        this.subject = subject;
        Console.WriteLine("Myself: " + name);
        Console.WriteLine("My Favorite Subject is: " + subject);
    }
}

// Inheriting the PgS class
class ProgramStore : PgS 
{
    // Constructor of derived class
    public ProgramStore()
    {
        Console.WriteLine("ProgramStore");
    }
}

class PStore 
{
    static void Main(string[] args)
    {
        // Child class object
        ProgramStore g = new ProgramStore();

        // Calling the method of base class
        // using the derived class object
        g.readers("hosseinpur", "C#");
    }
}

خروجی

ProgramStore
Myself: hosseinpur
My Favorite Subject is: C#

در مثال بالا کلاسی که از PgS ارث می‌برد می‌تواند از متدهای PgS بدون نیاز به بازنویسی آن‌ها استفاده کند.

انواع ارث بری در سی شارپ

در سی‌شارپ، به طور کلی ۴ نوع ارث‌بری وجود دارد که در زیر توضیح داده شده‌اند:

  1. ارث‌بری تک‌سطحی (Single Inheritance): یک کلاس مشتق‌شده که فقط از یک کلاس پایه ارث‌بری می‌کند.
  2. ارث‌بری چندسطحی (Multi-level Inheritance): یک کلاس مشتق‌شده که از یک کلاس پایه ارث‌بری می‌کند و سپس خود این کلاس مشتق‌شده به عنوان کلاس پایه برای کلاس مشتق‌شده دیگری عمل می‌کند.
  3. ارث‌بری سلسله‌مراتبی (Hierarchical Inheritance): یک کلاس پایه که به عنوان کلاس والد برای دو یا چند کلاس مشتق‌شده عمل می‌کند.
  4. ارث‌بری چندگانه (Multiple Inheritance): یک کلاس مشتق‌شده که از دو یا چند کلاس پایه ارث‌بری می‌کند (با استفاده از اینترفیس).
  5. ارث‌بری ترکیبی (Hybrid Inheritance): ارث‌بری ترکیبی ترکیبی از دو یا چند نوع ارث‌بری است.

۱. ارث بری تک سطحی در سی شارپ

در ارث‌بری تک‌سطحی، کلاس‌های فرزند ویژگی‌های یک کلاس والد را به ارث می‌برند. در تصویر زیر، کلاس A به عنوان کلاس پایه برای کلاس مشتق‌شده B عمل می‌کند.

تصویری از ارث بری تک سطحی در سی شارپ

۲. ارث بری چندسطحی در سی شارپ

در ارث‌بری چندسطحی، یک کلاس مشتق‌شده ویژگی‌های یک کلاس پایه را به ارث می‌برد و همچنین خود این کلاس مشتق‌شده به عنوان کلاس پایه برای کلاس دیگری عمل می‌کند.

در تصویر زیر، کلاس A به عنوان کلاس پایه برای کلاس مشتق‌شده B عمل می‌کند و کلاس B به عنوان کلاس پایه برای کلاس مشتق‌شده C عمل می‌کند.

 

تصویری از ارث‌بری چند سطحی در سی شارپ

۳. ارث بری سلسله مراتبی در سی شارپ

در ارث‌بری سلسله‌مراتبی، یک کلاس به عنوان کلاس والد (کلاس پایه) برای بیش از یک کلاس فرزند عمل می‌کند.

در تصویر زیر، کلاس A به عنوان کلاس پایه برای کلاس‌های مشتق‌شده B، C، و D عمل می‌کند.

تصویری از ارث بری سلسله مراتبی در سی شارپ

۴. ارث بری چندگانه در سی شارپ

در ارث‌بری چندگانه، یک کلاس می‌تواند بیش از یک کلاس والد داشته باشد و ویژگی‌های همه کلاس‌های والد را به ارث ببرد.

توجه داشته باشید که سی‌شارپ ارث‌بری چندگانه را برای کلاس‌ها پشتیبانی نمی‌کند. در سی‌شارپ، ارث‌بری چندگانه فقط از طریق اینترفیس‌ها قابل دستیابی است.

در تصویر زیر، کلاس C از اینترفیس‌های A و B مشتق شده است.

 

تصویری از ارث بری چندگانه در سی شارپ

۵. ارث بری ترکیبی در سی شارپ

ارث‌بری «Inheritance» ترکیبی ترکیبی از دو یا چند نوع از انواع ارث‌بری بالا است.

از آنجا که سی‌شارپ از ارث‌بری چندگانه برای کلاس‌ها پشتیبانی نمی‌کند، ارث‌بری ترکیبی نیز با استفاده از کلاس‌ها امکان‌پذیر نیست.

در سی‌شارپ، ارث‌بری ترکیبی تنها از طریق اینترفیس‌ها قابل دستیابی است.

مثال: قطعه کد زیر نمونه‌هایی از انواع ارث‌بری در زبان برنامه‌نویسی C# را نشان می‌دهد. به طور کلی، ارث‌بری به این معناست که یک کلاس ویژگی‌ها و متدهای یک کلاس دیگر را به ارث می‌برد.

// Different types of Inheritance
using System;

// Single Inheritance
class Animal 
{
    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

class Dog : Animal {
    public void Bark()
    {
        Console.WriteLine("Dog is barking.");
    }
}

// Multi-level Inheritance
class Mammal : Animal 
{
    public void Run()
    {
        Console.WriteLine("Mammal is running.");
    }
}

class Horse : Mammal 
{
    public void Gallop()
    {
        Console.WriteLine("Horse is galloping.");
    }
}

// Hierarchical Inheritance
class Bird : Animal 
{
    public void Fly()
    {
        Console.WriteLine("Bird is flying.");
    }
}

class Eagle : Bird 
{
    public void Hunt()
    {
        Console.WriteLine("Eagle is hunting.");
    }
}

class Penguin : Bird 
{
    public void Swim()
    {
        Console.WriteLine("Penguin is swimming.");
    }
}

// Multiple Inheritance
interface I1 
{
    void Method1();
}

interface I2 
{
    void Method2();
}

class MyClass : I1, I2 
{
    public void Method1()
    {
        Console.WriteLine("Method1 is called.");
    }

    public void Method2()
    {
        Console.WriteLine("Method2 is called.");
    }
}

class Geeks 
{
    // Main Method
    static void Main(string[] args)
    {
        // single inheritance
        Dog dog = new Dog();
        dog.Eat();

        // multi-level inheritance
        Horse horse = new Horse();
        horse.Eat();
        horse.Run();

        // hierarchical inheritance
        Eagle eagle = new Eagle();
        Penguin penguin = new Penguin();
        eagle.Fly();
        eagle.Hunt();
        penguin.Fly();
        penguin.Swim();

        // multiple inheritance
        MyClass myClass = new MyClass();
        myClass.Method1();
        myClass.Method2();

        Console.ReadLine();
    }
}

خروجی

Animal is eating.
Animal is eating.
Mammal is running.
Bird is flying.
Eagle is hunting.
Bird is flying.
Penguin is swimming.
Method1 is called.
Method2 is called

مفاهیم مهم ارث بری در سی شارپ

  • کلاس والد پیش‌فرض «Default Superclass»: به جز کلاس Object که هیچ کلاس والدی ندارد، هر کلاس یک و فقط یک کلاس والد مستقیم دارد (ارث‌بری تک‌سطحی). در صورت عدم وجود کلاس والد مشخص، هر کلاس به طور ضمنی زیرکلاس کلاس Object است.
  • ارث‌بری چندگانه «Multiple Inheritance»: یک کلاس والد می‌تواند هر تعداد زیرکلاس داشته باشد. اما یک زیرکلاس فقط می‌تواند یک کلاس والد داشته باشد، زیرا سی‌شارپ ارث‌بری چندگانه را برای کلاس‌ها پشتیبانی نمی‌کند. با این حال، ارث‌بری چندگانه از طریق اینترفیس‌ها در سی‌شارپ امکان‌پذیر است.
  • ارث‌بری سازنده‌ها «Inheriting Constructors»: یک زیرکلاس تمام اعضا (فیلدها و متدها) را از کلاس والد خود به ارث می‌برد. سازنده‌ها به عنوان اعضای کلاس در نظر گرفته نمی‌شوند، بنابراین توسط زیرکلاس‌ها به ارث برده نمی‌شوند. با این وجود، سازنده کلاس والد می‌تواند از زیرکلاس فراخوانی شود.

اعضای خصوصی «Private Members»: یک زیرکلاس اعضای خصوصی کلاس والد خود را به ارث نمی‌برد. با این حال، اگر کلاس والد متدهای get و set برای دسترسی به فیلدهای خصوصی خود داشته باشد، زیرکلاس می‌تواند از آن‌ها استفاده کند.

مزایای ارث بری در سی شارپ

  • قابلیت استفاده مجدد از کد «Code Reusability»: ارث‌بری به ما امکان می‌دهد ویژگی‌ها و متدهای یک کلاس موجود را به ارث ببریم و از کد موجود دوباره استفاده کنیم.
  • نگهداری آسان کد «Code Maintenance»: ارث‌بری نگهداری کد را ساده‌تر می‌کند، زیرا تغییرات اعمال‌شده در کلاس پایه به طور خودکار در کلاس‌های مشتق‌شده بازتاب می‌یابد.
  • سازمان‌دهی کد «Code Organization»: ارث‌بری سازمان‌دهی کد را بهبود می‌بخشد و کلاس‌های مرتبط را در یک ساختار سلسله‌مراتبی گروه‌بندی می‌کند.

معایب ارث بری در سی شارپ

  • اتصال تنگاتنگ «Tight Coupling»: ارث‌بری ارتباط تنگاتنگی بین کلاس پایه و کلاس مشتق‌شده ایجاد می‌کند که ممکن است نگهداری کد را دشوارتر کند.
  • پیچیدگی «Complexity»: ارث‌بری می‌تواند پیچیدگی کد را با معرفی سطوح اضافی از انتزاع افزایش دهد.
  • شکنندگی «Fragility»: ارث‌بری می‌تواند کد را شکننده‌تر کند، زیرا وابستگی بین کلاس پایه و کلاس مشتق‌شده می‌تواند مشکلاتی ایجاد کند.

نتیجه‌گیری

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

هرچند ارث‌بری مزایای متعددی دارد، اما در صورت استفاده نادرست، ممکن است پیچیدگی و وابستگی‌های غیرضروری در کد ایجاد کند. از این رو، درک محدودیت‌ها و چالش‌های آن مانند ایجاد اتصال تنگاتنگ بین کلاس‌ها و افزایش پیچیدگی، برای طراحی معماری بهینه و قابل اطمینان ضروری است.

در نهایت، سی‌شارپ با ارائه ابزارهایی مانند اینترفیس‌ها، امکان پیاده‌سازی انعطاف‌پذیرتر ارث‌بری را فراهم کرده است و به توسعه‌دهندگان اجازه می‌دهد از مزایای این تکنیک بهره‌مند شوند، در حالی که از چالش‌های رایج آن اجتناب کنند. استفاده هوشمندانه از ارث‌بری می‌تواند کدی تمیزتر، ساختاریافته‌تر و کارآمدتر ایجاد کند.

میزان رضایتمندی
لطفاً میزان رضایت خودتان را از این مطلب با دادن امتیاز اعلام کنید.
[ امتیاز میانگین 5 از 3 نفر ]
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *



برچسب‌ها:
سی شارپ


پیمایش به بالا