مشخصات مقاله
-
2634
-
5.0
-
33764
-
1
-
0
وراثت یا ارث بری (Inhertance) در C#
وقتی وارد دنیای برنامهنویسی با C# میشی، یکی از مفاهیمی که خیلی زود باهاش روبهرو میشی، ارث بری (Inheritance) هست. این مفهوم یکی از پایههای مهم برنامهنویسی شیگراست و بهت کمک میکنه کلاسها بتونن ویژگیها و رفتارهای مشترکشون رو از یک کلاس دیگه دریافت کنن.
درک درست مفهوم ارث بری، مخصوصاً وقتی با چند کلاس و رابطه بین اونها سروکار داری، اهمیت زیادی داره. در ادامه با یک مثال ساده و کاربردی میبینیم ارث بری در C# چطور کار میکنه و چطور میتونیم با استفاده از اون بین کلاسها ارتباط ایجاد کنیم.
یکی از مفاهیم کلیدی در زبانهای برنامهنویسی شیگرا یا Object Oriented Programming (OOP)، از جمله C#، مفهوم ارث بری یا Inheritance هست. ارث بری یعنی ایجاد کلاسهای جدیدی که بخشی از ویژگیهای خودشون رو از یک کلاس مادر یا Parent Class به ارث میبرن.
حتی اگر کل چهارچوب کاری NET. بر پایه مفهوم ارث بری نباشه، جمله معروف «همه چیز شی یا object است» یکی از نتایج همین مفهومه. در زبان C#، حتی یک عدد ساده هم نمونهای از یک کلاسه که خودش از کلاس پایه System.object به ارث رسیده. البته چهارچوب کاری NET. این امکان رو هم در اختیارت قرار داده که مقدار مورد نظرت رو مستقیماً به یک عدد اختصاص بدی، بدون اینکه لازم باشه نسخه جدیدی از کلاس Integer ایجاد کنی.
شاید توضیح مفهوم ارث بری در نگاه اول کمی سخت به نظر برسه، اما مثالهای عملی میتونن درک این مفهوم رو خیلی راحتتر کنن. نمونه کد زیر یک مثال ساده از ارث بری در زبان C# هست:
public class Animal
{
public void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
}
در کد بالا، ابتدا یک کلاس به نام Animal Class تعریف کردیم که یک متد ساده برای چاپ پیام خوشآمدگویی داره. بعد کلاس Dog رو ایجاد کردیم و با قرار دادن یک : در مقابل اون، به C# اعلام کردیم که این کلاس باید از کلاس Animal ارث بری کنه. نکته جالب این مثاله که رابطه سگ و حیوان در طبیعت هم تقریباً به همین شکله؛ یعنی Dog یک زیرمجموعه از حیواناته. حالا بیایید نحوه استفاده از این کلاسها رو بررسی کنیم:
Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();
اگه کد مثال بالا رو اجرا کنی، میبینی که با وجود اینکه متد Greeting() رو برای کلاس Dog تعریف نکردیم، این کلاس میتونه پیام خوشآمدگویی رو نمایش بده؛ چون متد Greeting() رو از کلاس مادر خودش، یعنی Animal Class، به ارث برده.
البته پیام خوشآمدگویی اولیه کد بالا کمی نامفهومه. بیایید کمی کد به مثال قبلی اضافه کنیم تا مشخص بشه چه حیوانی داره به ما خوشآمد میگه!
public class Animal
{
public virtual void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
public override void Greet()
{
Console.WriteLine("Hello, I'm a dog!");
}
}
در کنار متدی که به کلاس Dog Class اضافه کردیم، دو نکته مهم رو میبینیم. اول اینکه کلمه کلیدی مجازی یا Virtual keyword رو به متد کلاس Animal Class اضافه کردیم. از طرف دیگه، برای کلاس Dog Class از کلمه کلیدی override استفاده کردیم.
در زبان C# نمیتونی یک عضو (member) از یک کلاس رو بازنویسی یا override کنی، مگر اینکه اون عضو رو به عنوان virtual مشخص کرده باشی. همچنین اگه بخوای، میتونی متد به ارث بردهشده رو با استفاده از کلمه کلیدی base، به شکل اولیه خودش فراخوانی کنی. نمونه کد این کار رو در مثال زیر میبینی:
public override void Greet()
{
base.Greet();
Console.WriteLine("Yes I am - a dog!");
}
فقط متدها (Methods) نیستن که میتونن در کلاسها به ارث برده بشن؛ سایر اعضای یک کلاس، مثل فیلدها (Fields) و خواص (Properties) هم قابلیت ارث بری دارن. فقط باید به قواعد بازه دسترسی (access modifier) که در درس قبل توضیح دادیم، توجه کنی. ارث بری یا Inheritance فقط به رابطه بین یک کلاس و یک کلاس دیگه محدود نمیشه. میتونی یک سلسلهمراتب از کلاسهای مرتبط با هم ایجاد کنی. برای مثال، میتونی یک کلاس به نام Puppy بسازی که خودش از کلاس Dog ارث ببره، در حالی که Dog فرزند کلاس Animal هست.
نکته مهم :
در C# نمیتونی کاری کنی که یک کلاس به صورت مستقیم از چند کلاس مختلف ارث ببره. به این نوع ساختار ارث بری چندگانه (multiple inheritance) گفته میشه که در C# پشتیبانی نمیشه.
اگه میخوای مفاهیم C# رو اصولیتر یاد بگیری و در کنار مباحثی مثل ارث بری با ساختار و قابلیتهای این زبان بیشتر آشنا بشی، میتونی مسیر یادگیریت رو با دوره آموزش C# ادامه بدی و مفاهیم برنامهنویسی با سیشارپ رو به شکل منسجمتری دنبال کنی.