ارثبری
ارثبری در سیشارپ (Inheritance in C#) یکی از اصول کلیدی برنامهنویسی شیگرا است که به یک کلاس اجازه میدهد ویژگیها و متدهای یک کلاس دیگر را به ارث ببرد. استفاده از ارثبری باعث کاهش تکرار کد، بهبود سازماندهی پروژهها و ایجاد معماری نرمافزاری ماژولار و قابل نگهداری میشود. در ارثبری، کلاس پایه (Base Class) ویژگیها و رفتارهای عمومی را تعریف میکند و کلاس مشتق (Derived Class) میتواند آنها را بازتعریف (Override) یا توسعه دهد. این روش رابطه «is-a» بین اشیاء را مدل میکند، به عنوان مثال Car یک نوع Vehicle است.
در توسعه سیشارپ، ارثبری برای ایجاد سلسله مراتب کلاسها، پیادهسازی چندریختی (Polymorphism)، و مدیریت دادهها و رفتارهای مشترک بسیار مفید است. مفاهیم کلیدی شامل virtual، override، abstract، sealed و قابلیت پشتیبانی از پالیمورفیسم هستند.
در این آموزش، شما خواهید آموخت چگونه کلاسهای پایه و مشتق ایجاد کنید، متدها را بازتعریف کنید و از چندریختی برای مدیریت اشیاء مختلف به صورت یکپارچه استفاده نمایید. همچنین بهترین شیوهها، بهینهسازی عملکرد و جلوگیری از خطاهای رایج در ارثبری بررسی خواهند شد تا پروژههای شما ایمن، بهینه و قابل نگهداری باشند.
مثال پایه
textusing System;
// کلاس پایه
class Vehicle
{
public string Brand { get; set; }
public int Year { get; set; }
public virtual void DisplayInfo()
{
Console.WriteLine($"Vehicle: {Brand}, Year: {Year}");
}
}
// کلاس مشتق
class Car : Vehicle
{
public int Doors { get; set; }
public override void DisplayInfo()
{
Console.WriteLine($"Car: {Brand}, Year: {Year}, Doors: {Doors}");
}
}
class Program
{
static void Main(string\[] args)
{
Vehicle vehicle = new Vehicle { Brand = "Toyota", Year = 2020 };
vehicle.DisplayInfo();
Car car = new Car { Brand = "Honda", Year = 2021, Doors = 4 };
car.DisplayInfo();
}
}
در این مثال، کلاس Vehicle به عنوان کلاس پایه تعریف شده و دارای ویژگیهای عمومی Brand و Year و یک متد virtual به نام DisplayInfo() است. کلیدواژه virtual به کلاس مشتق اجازه میدهد این متد را بازتعریف کند.
کلاس Car از Vehicle ارثبری میکند و ویژگی Doors را اضافه میکند. متد DisplayInfo() در کلاس Car بازتعریف شده است تا اطلاعات اختصاصی خودرو را نمایش دهد. این نمونه نشان میدهد چگونه میتوان با استفاده از ارثبری، قابلیت استفاده مجدد از کد و توسعه عملکرد کلاسها را به دست آورد. در پروژههای واقعی، چنین ساختاری برای مدیریت سلسله مراتب اشیاء و پیادهسازی پالیمورفیسم بسیار کاربردی است.
مثال کاربردی
textusing System;
using System.Collections.Generic;
// کلاس پایه: Product
class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public virtual void Display()
{
Console.WriteLine($"Product: {Name}, Price: {Price:C}");
}
}
// کلاس مشتق: Electronics
class Electronics : Product
{
public int WarrantyMonths { get; set; }
public override void Display()
{
Console.WriteLine($"Electronics: {Name}, Price: {Price:C}, Warranty: {WarrantyMonths} months");
}
}
// کلاس مشتق: Food
class Food : Product
{
public DateTime ExpiryDate { get; set; }
public override void Display()
{
Console.WriteLine($"Food: {Name}, Price: {Price:C}, Expiry: {ExpiryDate:yyyy/MM/dd}");
}
}
class Store
{
private List<Product> products = new List<Product>();
public void AddProduct(Product product)
{
products.Add(product);
}
public void ShowProducts()
{
foreach (var product in products)
{
product.Display();
}
}
}
class Program
{
static void Main(string\[] args)
{
Store store = new Store();
store.AddProduct(new Electronics { Name = "Smartphone", Price = 1500m, WarrantyMonths = 24 });
store.AddProduct(new Food { Name = "Milk", Price = 5.5m, ExpiryDate = DateTime.Now\.AddMonths(1) });
store.ShowProducts();
}
}
در این مثال، Product کلاس پایه است که ویژگیهای عمومی Name و Price و متد virtual Display() دارد. کلاسهای Electronics و Food ویژگیها و رفتارهای خاص خود را اضافه کرده و متد Display() را بازتعریف میکنند.
کلاس Store مدیریت مجموعهای از Productها را انجام میدهد. با استفاده از پالیمورفیسم، ارجاع به کلاس پایه میتواند متد مناسب کلاس مشتق را فراخوانی کند. این الگو در پروژههای واقعی مانند فروشگاههای آنلاین و سیستمهای مدیریت موجودی کاربرد دارد و باعث میشود کد انعطافپذیر و قابل نگهداری باشد.
بهترین شیوهها و اشتباهات رایج در ارثبری:
- ویژگیها و متدهای عمومی را در کلاس پایه تعریف کنید و از virtual/abstract به درستی استفاده کنید.
- از ایجاد سلسله مراتب خیلی عمیق پرهیز کنید تا پیچیدگی کاهش یابد.
- مدیریت حافظه و منابع را جدی بگیرید و از نشت حافظه جلوگیری کنید.
- از exception handling مناسب استفاده نمایید.
- برای بهینهسازی عملکرد، گاهی استفاده از interfaces یا composition بهتر است.
- دادههای حساس را encapsulate کرده و امنیت را رعایت کنید.
📊 جدول مرجع
سیشارپ Element/Concept | Description | Usage Example |
---|---|---|
Class | تعریف کلاس پایه یا مشتق | class Vehicle { public string Brand; } |
Inheritance | ایجاد سلسله مراتب کلاسها | class Car : Vehicle { public int Doors; } |
Virtual Method | متد قابل بازتعریف در کلاس مشتق | public virtual void Display() { } |
Override | بازتعریف متد کلاس پایه | public override void Display() { } |
Polymorphism | فراخوانی متد مناسب کلاس مشتق از طریق ارجاع کلاس پایه | Vehicle v = new Car(); v.Display(); |
نتایج اصلی یادگیری ارثبری شامل تعریف قابلیتهای عمومی در کلاس پایه، بازتعریف یا توسعه آنها در کلاس مشتق و استفاده از پالیمورفیسم برای مدیریت یکپارچه اشیاء است. این مهارت باعث میشود اپلیکیشنها ماژولار، قابل نگهداری و انعطافپذیر باشند.
برای ادامه مسیر، مطالعه abstract classes، interfaces و design patterns توصیه میشود. ترکیب ارثبری و composition میتواند به طراحی سیستمهای با عملکرد بالا، ایمن و قابل نگهداری منجر شود. منابع مفید شامل مستندات مایکروسافت، آموزشهای پیشرفته سیشارپ و پروژههای open-source هستند.
🧠 دانش خود را بیازمایید
آزمون دانش شما
درک خود از این موضوع را با سوالات کاربردی بسنجید.
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود