چند ریختی (Polymorphism) و متد های Overriding
چندریختی یا Polymorphism به معنای "اشکال مختلف" است، و این زمانی اتفاق می افتد که کلاسهای زیادی داشته باشیم که از نظر وراثت با یکدیگر مرتبط هستند.
وراثت به ما اجازه می دهد تا فیلدها و متدها را از کلاس دیگری به ارث ببریم. چندریختی از این متدها برای انجام کارهای مختلف استفاده می کند. این به ما امکان می دهد یک عمل واحد را به روش های مختلف انجام دهیم.
به عنوان مثال ، به یک کلاس پایه به نام 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
چرا و چه زمانی باید از "وراثت" و "چند ریختی" استفاده شود؟
- برای قابلیت استفاده مجدد کد مفید است: هنگام ایجاد کلاس جدی ، از فیلدها و متدهای کلاس موجود استفاده مجدد کنید.

آموزش اسکریمینگ فراگ (screaming frog) به صورت 0 تا 100

آموزش Web Workers API در html

آموزش lazy load jquery تصاویر (لیزی لود در جی کوئری)

آموزش استفاده از بوت استرپ (bootstrap) در ری اکت (react.js)

آموزش Disavow بک لینک های اسپم و مخرب

آموزش جامع ثبت مکان در گوگل مپ (Google Map)

آموزش طراحی قالب اینستاگرام + معرفی ابزار

آموزش افزونه imagify (فشرده سازی و کم کردن حجم تصاویر) + دانلود

آموزش Drag And Drop (کشیدن و رها کردن) عناصر در HTML

آموزش کامل سایز پست و استوری اینستاگرام

Web Storage API در HTML

مدیریت خطا (Exception) ها در سی شارپ (try و catch)
آموزش فایل ها (files) در سی شارپ
Enum (داده شمارشی) در سی شارپ
Interface (اینترفیس، واسط) ها در سی شارپ

Abstraction (کلاس انتزاعی) در سی شارپ
وراثت (Inheritance یا ارث بری) در سی شارپ
خصوصیات (Properties) کلاس ها در سی شارپ(Get and Set)

سطح دسترسی (Access Modifiers) در سی شارپ
سازنده (Constructor) ها در سی شارپ