وراثت (Inheritance)
وراثت یعنی یک کلاس از ویژگی ها و متدهای کلاس دیگر استفاده کند. مثل وقتی که بچه ای بعضی ویژگی های پدر و مادرش را به ارث می برد! این کار باعث می شود کدهایت کوتاه تر و منظم تر شوند.
کلاس پایه و مشتق شده
در سی شارپ، کلاسی که از آن ارث بری می شود را کلاس پایه (Base Class) می گویند، و کلاسی که از آن ارث می برد را کلاس مشتق شده (Derived Class) می نامند.
برای تعریف وراثت از علامت : استفاده می شود.
در مثال زیر، کلاس Car از کلاس Vehicle ارث بری می کند و به تمام ویژگی ها و متدهای آن دسترسی دارد.
class Vehicle // کلاس پایه (پدر)
{
public string brand = "Ford"; // ویژگی کلاس Vehicle
public void honk() // متد کلاس Vehicle
{
Console.WriteLine("Tuut, tuut!");
}
}
class Car : Vehicle // کلاس مشتق شده (فرزند)
{
public string modelName = "Mustang";
}
class Program
{
static void Main(string[] args)
{
Car myCar = new Car();
myCar.honk(); // از کلاس پدر
Console.WriteLine(myCar.brand + " " + myCar.modelName);
}
}
نکته: با وراثت می توانی بدون بازنویسی، متدها و ویژگی های کلاس دیگر را دوباره استفاده کنی.
چرا وراثت مفید است؟
- کد کمتر می نویسی چون تکرار نمی کنی.
- کدهایت منظم تر و قابل درک تر می شوند.
- می توانی متدهای کلاس پدر را تغییر دهی یا گسترش دهی.
مثلاً فرض کن در بازی ای، همه کاراکترها (مثل قهرمان و دشمن) ویژگی های مشترکی دارند، مثل جان (Health) یا حرکت (Move). با وراثت، این ویژگی ها را فقط یک بار در کلاس پایه تعریف می کنی.
کلمه کلیدی sealed
اگر نخواهی کلاس دیگری از کلاست ارث بری کند، از sealed استفاده کن. مثل قفل کردن درِ کلاس برای جلوگیری از کپی برداری.
sealed class Vehicle
{
// کلاسی که دیگر از آن ارث بری نمی شود
}
class Car : Vehicle // خطا می دهد
{
}
هشدار: اگر از کلاس sealed ارث بری کنی، برنامه خطا می دهد.
جمع بندی سریع
- وراثت یعنی اشتراک ویژگی ها بین کلاس ها.
- کلاس پدر = پایه، کلاس فرزند = مشتق شده.
- علامت
:برای ایجاد وراثت است. sealedیعنی جلوگیری از ارث بری.- باعث صرفه جویی در زمان و کد می شود.
برای ادامه یادگیری، بخش ویژگی ها و چندریختی را هم ببین تا درک عمیق تری از شی گرایی پیدا کنی.