فهرست سرفصل‌های #C
خانه (HOME) مقدمه (Intro) شروع کار (Get Started) سینتکس (Syntax) خروجی (Output) کامنت ها (Comments) متغیرها (Variables) ثابت ها (Constants) نمایش متغیرها (Display Variables) متغیرهای متعدد (Multiple Variables) شناسه ها (Identifiers) انواع داده (Data Types) تبدیل نوع (Type Casting) ورودی کاربر (User Input) عملگرها (Operators) انتساب (Assignment) مقایسه (Comparison) منطقی (Logical) ریاضی (Math) رشته ها (Strings) اتصال رشته ها (Concatenation) درون گذاری رشته (Interpolation) دسترسی به رشته ها (Access Strings) کاراکترهای ویژه (Special Characters) بولی ها (Booleans) if (If...Else) else (If...Else) else if (If...Else) شکل کوتاه if..else (Short hand if..else) سوئیچ (Switch) حلقه while (While Loop) حلقه for (For Loop) حلقه foreach (Foreach loop) شکستن/ادامه (Break/Continue) آرایه ها (Arrays) حلقه روی آرایه (Loop through an array) مرتب سازی آرایه ها (Sort arrays) آرایه های چندبعدی (Multidimensional arrays) متدها (Methods) پارامترها (Parameters) پارامتر پیش فرض (Default Parameter) مقادیر بازگشتی (Return Values) آرگومان های نام دار (Named Arguments) بارگذاری متد (Method Overloading) شیء گرایی (OOP) کلاس ها/اشیا (Classes/Objects) چند شیء (Multiple Objects) اعضای کلاس (Class Members) سازنده ها (Constructors) قیدهای دسترسی (Access Modifiers) ویژگی ها (Properties) وراثت (Inheritance) چندریختی (Polymorphism) انتزاع (Abstraction) اینترفیس (Interface) چند اینترفیس (Multiple Interfaces) شمارش ها (Enums) فایل ها (Files) استثناها (Exceptions) افزودن دو عدد (Add Two Numbers) نمونه ها (Examples)
#C

#C — وراثت (Inheritance)

آخرین بروزرسانی: 1404/08/05

وراثت (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 یعنی جلوگیری از ارث بری.
  • باعث صرفه جویی در زمان و کد می شود.

برای ادامه یادگیری، بخش ویژگی ها و چندریختی را هم ببین تا درک عمیق تری از شی گرایی پیدا کنی.