C# – چندریختی (Polymorphism)

ندریختی به معنای “اشکال مختلف” است و در برنامه‌نویسی شیءگرا زمانی اتفاق می‌افتد که کلاس‌های مختلفی از نظر وراثت با یکدیگر مرتبط هستند و از متدها برای انجام وظایف مختلف استفاده می‌شود. این مفهوم به ما این امکان را می‌دهد که یک عمل را به روش‌های مختلف انجام دهیم.

مفهوم چندریختی و بازنویسی متدها (Method Overriding)

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

مثال ابتدایی از چندریختی

در این مثال، کلاس پایه Animal متدی به نام animalSound() دارد و کلاس‌های مشتق شده مانند Pig و Dog متدهای خود را برای تولید صداهای خاص پیاده‌سازی می‌کنند.

بدون استفاده از virtual و override

using System;

class Animal  // کلاس پایه (والد)
{
    public void animalSound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

class Pig : Animal  // کلاس مشتق (فرزند)
{
    public void animalSound()
    {
        Console.WriteLine("The pig says: wee wee");
    }
}

class Dog : Animal  // کلاس مشتق (فرزند)
{
    public void animalSound()
    {
        Console.WriteLine("The dog says: bow wow");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();  // ایجاد شیء از Animal
        Animal myPig = new Pig();  // ایجاد شیء از Pig
        Animal myDog = new Dog();  // ایجاد شیء از Dog

        myAnimal.animalSound();
        myPig.animalSound();
        myDog.animalSound();
    }
}

خروجی:

The animal makes a sound

The animal makes a sound
The animal makes a sound

در این حالت، حتی وقتی از اشیاء کلاس‌های مشتق شده استفاده می‌کنیم، متد animalSound از کلاس پایه فراخوانی می‌شود. این به دلیل عدم استفاده از virtual و override است.

استفاده از virtual و override

برای اینکه متدها به درستی در کلاس‌های مشتق شده بازنویسی شوند، باید از کلیدواژه virtual در کلاس پایه و از override در کلاس‌های مشتق شده استفاده کنیم.

با استفاده از virtual و override

using System;

class Animal  // کلاس پایه (والد)
{
    public virtual void animalSound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

class Pig : Animal  // کلاس مشتق (فرزند)
{
    public override void animalSound()
    {
        Console.WriteLine("The pig says: wee wee");
    }
}

class Dog : Animal  // کلاس مشتق (فرزند)
{
    public override void animalSound()
    {
        Console.WriteLine("The dog says: bow wow");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();  // ایجاد شیء از Animal
        Animal myPig = new Pig();  // ایجاد شیء از Pig
        Animal myDog = new Dog();  // ایجاد شیء از Dog

        myAnimal.animalSound();
        myPig.animalSound();
        myDog.animalSound();
    }
}

خروجی:

The animal makes a sound

The pig says: wee wee
The dog says: bow wow

در این حالت، با استفاده از virtual و override، متد animalSound به درستی در کلاس‌های مشتق شده بازنویسی شده و نتیجه مورد انتظار به دست می‌آید.

چرا و چه زمانی از "وراثت" و "چندریختی" استفاده کنیم؟

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

  • انعطاف‌پذیری: چندریختی به شما این امکان را می‌دهد که متدها را در کلاس‌های مختلف به روش‌های متفاوت پیاده‌سازی کنید و به این ترتیب کد شما قابل گسترش‌تر و انعطاف‌پذیرتر خواهد بود.

  • مدیریت ساده‌تر تغییرات: با استفاده از چندریختی، می‌توانید تغییرات را در یک مکان (در کلاس پایه) اعمال کرده و این تغییرات به تمام کلاس‌های مشتق شده اعمال خواهد شد.

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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.