ارث بری در کلاس ها
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
ارث بری در کلاس ها
در پست آموزش کلاس چیست، با مفهوم کلاسها آشنا شدید.
پس میدانید که کلاسها هم خود یک نوع دادهای مثل int و string و float و غیره هستند، یعنی میتوانیم از آنها برای ذخیره اطلاعات استفاده کنیم.
در ابتدا ما چند کلاس تستی (تنها با پراپرتی) برای یک پروژه فرضی به عنوان مثال دانشگاه تعریف میکنیم:
الف) کلاس دانشجویان
public class Student
{
public int StudentId { get; set; }
public string StudentFullName { get; set; }
public int StudentCode { get; set; }
}
ب) کلاس اساتید
public class Master
{
public int MasterId { get; set; }
public string MasterFullName { get; set; }
public string MasterDegree { get; set; }
}
پ) کلاس کارمند
public class Employee
{
public int EmployeeId { get; set; }
public string EmployeeFullName { get; set; }
public int EmployeeSalary { get; set; }
}
اگر به مثالهای بالا توجه کنید، متوجه میشوید که در هر سه کلاس، دو پراپرتی اول هر سه کلاس یعنی آیدی و نام تکراری هستند، یعنی هر سه از جنس string، با یک ساختار و به یک منظور مشابه تعریف شدهاند.
حال فرض کنید در پروژههای خود، ۱۰۰ کلاس دارید که پراپرتیهایی مشترک باهم دارند، آیا میخواهید شبیه به مثالهای بالا برای هر کدام از کلاسها، این پراپرتیها را جداگانه تعریف کنید؟
قطعا این کار منطقیای نیست!
یکی از کاربردهای ارثبری کلاسها دقیقا همین یکسان کردن پراپرتیها در کلاسها است!
ارثبری به برنامهنویس کمک میکند تا ابتدا یک کلاس والد تعریف کرده، و تمامی اعضاء مشترک همه کلاسها را درون آن کلاس والد بنویسد.
دراین حالت دیگر نیازی به نوشتن عضوهای تکراری در کلاسهای فرزند وجود نداشته و با مبحث ارثبری، تمامی کلاسهای فرزند در زمان تعریف شئ از خود، یک نمونه copy از تمامی اعضا نوشته شده در کلاس والد را برای خود به ارث میبرند!
به عنوان مثال، کلاس والد Person را به شکل زیر ابتدا تعریف میکنیم:
public class Person
{
public int Id { get; set; }
public string FullName { get; set; }
}
سپس تمامی کلاسهای student, master و employee را فرزند این کلاس میکنیم:
public class Student :Person
{
public int StudentCode { get; set; }
}
public class Master :Person
{
public string MasterDegree { get; set; }
}
public class Employee :Person
{
public int EmployeeSalary { get; set; }
}
همانطور که مشاهده میکنید، برای ایجاد محبت ارثبری باید جلوی اسم کلاسهای فرزند، ابتدا یک دونقطه (:) درج کرده و سپس نام کلاس والد را مقابل آن بنویسیم.
public class Student :Person
public class Master :Person
public class Employee :Person
با تغییر در این سه خط، تمامی کلاسهای ما فرزند کلاس Person شده و مشاهده میکنید که پراپرتیهای مشترک از این سه کلاس حذف شدهاند؛ اما همچنان در زمان تعریف یک شئ یا نمونه از این سه کلاس، دسترسی به پراپرتیهای Id و FullName با استفاده از شناسه اشیاء تعریف شده هر سه کلاس داریم!
نکتهای که وجود دارد این است که در Database برای هر سه کلاس student، employee و master یک جدول برای نگهداری رکوردها ساخته میشود، اما برای کلاس Person هیچ جدولی ساخته نخواهد شد، چرا که Person یک کلاس نمونه و صرفا جهت والد بودن در پروژه تعریف و ساخته شده است؛ درنتیجه داخل دیتابیس برای هر سه جدول student، employee و master ستونهای Id و FullName را داریم، اما در برنامه خودمان داخل کلاسها، این دو پراپرتی قابل مشاهده نیستند.
با توجه به توضیح بالا، معمولا کلاسهای والد مثل همین Person، کلاسهایی هستند که صرفا به عنوان کلاس مدل مورد استفاده قرار گرفته و موجودیت واقعی در برنامه ما ندارند، به همین علت اصلا نیازی نیست که از این کلاس مدل، یک شئ تعریف شود!
هر زمان که نیاز داشتیم از کلاسی هیچ نمونه و شئای تعریف نشود، کافی است تا در زمان تعریف کلاس، قبل از کلمه کلیدی class، کلمه کلیدی abstract را بنویسیم:
public abstract class Person
{
public int Id { get; set; }
public string FullName { get; set; }
}
با این کار دیگر نمیتوان از کلاس Person یک شئ یا نمونه جدید در برنامه تعریف کرد.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.