آموزش چند ریختی (Polymorphism) در سی شارپ

آموزش چند ریختی (Polymorphism) در سی شارپ

چندریختی یا Polymorphism در سی شارپ به معنای "اشکال مختلف" است، و این زمانی اتفاق می افتد که کلاسهای زیادی داشته باشیم که از نظر وراثت با یکدیگر مرتبط هستند.

وراثت به ما اجازه می دهد تا فیلدها و متدها را از کلاس دیگری به ارث ببریم. چندریختی از این متدها برای انجام کارهای مختلف استفاده می کند. این به ما امکان می دهد یک عمل واحد را به روش های مختلف انجام دهیم

زمان مطالعه: 3 دقیقه
بازدید: 1599
پرسش و پاسخ: 0

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

class Animal  // Base class (parent) 
{
  public void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

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

اکنون می توانیم اشیا Pig و Dog  را ایجاد کنیم و متد animalSound را روی هر دو مورد فراخوانی کنیم:

class Animal  // Base class (parent) 
{
  public void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

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

خروجی:

The animal makes a sound
The animal makes a sound
The animal makes a sound

خروجی مثال بالا احتمالاً همان چیزی نبود که انتظار داشتید. این به این دلیل است که متد کلاس پایه ، وقتی که آنها با یک نام مشترک هستند ، از متد کلاس مشتق شده غالب است.

با این حال ، سی شارپ با اضافه کردن کلمه کلیدی virtual به متد درون کلاس پایه و با استفاده از کلمه کلیدی override برای هر متد کلاس مشتق شده ، گزینه ای را برای جایگزینی متد کلاس پایه فراهم می کند:

class Animal  // Base class (parent) 
{
  public virtual void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

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

خروجی:

The animal makes a sound
The pig says: wee wee
The dog says: bow wow

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

  • برای قابلیت استفاده مجدد کد مفید است: هنگام ایجاد کلاس جدی ، از فیلدها و متدهای کلاس موجود استفاده مجدد کنید.
بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده