• مقدمه

پیرو مباحث شیء‌گرایی که تا کنون با هم در حال مرور آن بودیم، این بخش نیز قرار هست با هم در رابطه با یکی از موضوعات مهم دیگر از مفاهیم شیء‌گرایی صحبت کنیم. وراثت یا Inheritance یکی دیگر از مهم‌ترین مباحث شیء‌گرایی می‌باشد. برای آشنایی با آن، با ما همراه باشید.

  • معرفی وراثت یا Inheritance

معرفی این مبحث در مثال بهتر است تا اینکه آن را بخواهیم در چند خط تعریف کنیم، اما وراثت درواقع کلاسی می‌باشد که از یک کلاس سطح بالاتر ساخته می‌شود. کلاس سطح بالا که به آن کلاس والد می‌گویند، کلاس اصلی و کلاسی که از آن ساخته می‌شود را کلاس فرزند می‌نامیم.

به آخرین نسخه همراه با جدیدترین تغییرات از کلاس HappyBirthday نگاه کنید:

inheritanceHB

ما Propertyها را از این کلاس حذف کردیم و همانطور که می‌بینید، تنها دو متد Public داریم. سازنده یا همان Constructor همچنان به‌همان صورت باقی‌ است. تنها کاری که این سازنده در اینجا انجام می‌دهد، اختصاص دو مقدار رشته به دو متغیر است.

وراثت، ساختن یک کلاس فرزند از کلاس والد است. در اصطلاح به کلاس پدر، Base می‌گویند. به کلاس فرزند نیز نام derived را اطلاق می‌کنند. کلاس فرزند می‌تواند از تمامی متدهای کلاس والد استفاده کند؛ اما کدهای مختص به خود را خواهد داشت! در عکس زیر، یک کلاس فرزند را می‌بینید که از کلاس والد خود، به ارث برده است.

inheritance_Derived

کاری که می‌خواهیم انجام دهیم این است که یک کلاس دیگری با نام BirthdayParty ایجاد کنیم. از آنجایی که این دو به هم مرتبط هستند، ما می‌توانیم از وراثت کمک بگیریم. این بدین معناست که دیگر لازم نیست که همه چیز را از ابتدا شروع کنیم. تنها کافیست هرآنچه را که در کلاس HappyBrithday ایجاد کرده‌ایم را مجدداً استفاده کنیم. برای مثال، فرض کنید که بخواهیم متن زیر را نمایش دهیم:

Happy Birthday Shahid!

You have 8 Presents

Enjoy your party!

ما می‌توانیم که دو پیغام اول را از کلاس والد دریافت کنیم، ولی پیغام آخر را می‌توان که از کلاس فرزند اخذ کرد. روز تولد (Birthday) و جشن تولد (Birthday Party) دارای ارتباط نزدیک هستند، اما می‌خواهیم این دو را از هم جدا نگه داریم. با این وجود، خواهیم توانست که اطلاعات بیشتری را در مورد جشن تولد اضافه کنیم؛ مثلاً: تعداد میهمانان، محل برگزاری، ساعت برگزاری، و …. اما این‌ها را به کلاس فرزند اضافه خواهیم کرد؛ نه کلاس والد!

به خط اول کدهای فوق دقت کنید:

class BirthdayParty HappyBirthday

طبق آنچه پیش‌تر گفته شد، برای ساخت کلاس، ابتدا با کلمه کلیدی Class شروع کردیم و سپس نام کلاس مورد نظرمان را نوشتیم. از آنجا که می‌خواهیم این کلاس، فرزند کلاس دیگری باشد، از کد زیر استفاده کردیم:

: HappyBirthday

درواقع برای آنکه مشخص کنیم که این کلاس، کلاس فرزند است، از دونقطه استفاده کردیم و برای مشخص نمودن کلاس والد آن،‌ نام آن در مقابل آورده شده است.

تنها نکته متفاوت در این بخش این است:

public BirthdayParty() :base()

{

}

ما در حال ایجاد یک سازنده برای کلاس فرزند هستیم، اما این سازنده، چیزی درباره کدهای کلاس والد نمی‌داند! برای آنکه کدهای کلاس والد را برایش تعریف کنیم از کد زیر استفاده کردیم:

:base()

حال،‌ هنگامی که برنامه اجرا می‌شود،‌ سی‌شارپ بصورت خودکار علاوه بر متغیرهای خود کلاس فرزند(در صورت وجود)، متغیرهای کلاس والد را نیز مقداردهی اولیه خواهد کرد.

کدهای زیر، نمونه‌ای از استفاده از دو کلاس است که در داخل کدهای button قرار داده شده است:

inheritanceButtonB

در این کد، یک شیء یا همان Object از کلاس فرزند با نام partyOn ایجاد کردیم. سپس، سه پیغام مختلف را در ادامه معرفی نموده‌ایم. دو پیغام اول، از کلاس والذ اخذ شده است (درواقع از متدهای کلاس والد استفاده شده است.) و پیغام آخر، متدی است که در کلاس فرزند تعریف شده.

بحث وراثت یکی از مباحث پیچیده در سی‌شارپ است که مطالعه زیادی را می‌خواهد، اما بطور کلی، در هنگام استفاده از وراثت، کلاس فرزند، همه‌ی متغیرها، متدها و Propertyها را از کلاس والذ خود به ارث می‌برد.