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 به درستی در کلاس‌های مشتق شده بازنویسی شده و نتیجه مورد انتظار به دست می‌آید.

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

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

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

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

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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

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

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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