TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #205 140
📖 سری آموزشی کتاب C# 12 in a Nutshell

🏛 ستون‌های OOP در #C: وراثت، چندریختی و کستینگ

آماده‌اید که به قلب برنامه‌نویسی شیءگرا (OOP) سفر کنیم؟ امروز می‌خوایم سه تا از مهم‌ترین و به هم پیوسته‌ترین مفاهیم #C رو کالبدشکافی کنیم: وراثت، چندریختی و کستینگ.

تسلط بر این سه مفهوم، پایه و اساس ساختن سیستم‌های انعطاف‌پذیر و قدرتمنده.

1️⃣ وراثت (Inheritance): "یک نوع از..." 👨‍👩‍👧
وراثت به یک کلاس اجازه میده که ویژگی‌ها و رفتارهای یک کلاس دیگه رو به ارث ببره. به کلاس اصلی میگیم کلاس پایه (Base Class) و به کلاس جدید میگیم کلاس مشتق‌شده (Derived Class). این یعنی "کلاس مشتق‌شده، یک نوع از کلاس پایه است".

// این کلاس پایه ماست
public class Asset
{
public string Name;
}
// این دو کلاس، از Asset ارث‌بری می‌کنند
public class Stock : Asset
{
public long SharesOwned;
}

public class House : Asset
{
public decimal Mortgage;
}

حالا Stock و House هم پراپرتی Name رو دارن و هم پراپرتی‌های مخصوص خودشون.

🎭 جادوی چندریختی (Polymorphism) در
C# : Upcasting و Downcasting


2️⃣ چندریختی (Polymorphism): یک متغیر، چند چهره

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

مثال: این متد یک Asset به عنوان ورودی می‌گیره، ولی شما می‌تونید هم Stock و هم House رو بهش پاس بدید!
// کلاس‌های پست قبلی
public class Asset { public string Name; }
public class Stock : Asset { public long SharesOwned; }
public class House : Asset { public decimal Mortgage; }
// این متد به لطف چندریختی، با هر نوع Asset کار می‌کنه
public static void Display(Asset asset)
{
Console.WriteLine(asset.Name);
}

// --- نحوه استفاده ---
Stock msft = new Stock { Name = "MSFT" };
House mansion = new House { Name = "Mansion" };

Display(msft); // خروجی: MSFT
Display(mansion); // خروجی: Mansion


3️⃣ کستینگ (Casting): تغییر زاویه دید به آبجکت 🔄

کستینگ یعنی تغییر نوع یک رفرنس برای دسترسی به اعضای مختلف. دو نوع اصلی داریم:

Upcasting (تبدیل فرزند به پدر) ⬆️

این کار همیشه امنه و به صورت ضمنی (implicit) انجام میشه. شما یک نمونه از کلاس فرزند رو در یک متغیر از نوع پدر قرار میدید. بعد از این کار، شما به آبجکت از یک زاویه دید "محدودتر" نگاه می‌کنید و فقط به اعضایی که در کلاس پدر تعریف شدن، دسترسی دارید.
Stock msft = new Stock { Name = "MSFT", SharesOwned = 1000 };
Asset a = msft; // Upcast (ضمنی و همیشه امن)
Console.WriteLine(a.Name); // ✅ درسته، چون Name در Asset هست
// Console.WriteLine(a.SharesOwned); // ❌ خطای زمان کامپایل! a از نوع Asset است و SharesOwned را نمی‌شناسد.


Downcasting (تبدیل پدر به فرزند) ⬇️

این کار می‌تونه خطرناک باشه و باید به صورت صریح (explicit) با (type) انجام بشه. شما به کامپایلر میگید: "من مطمئنم این آبجکت که از نوع پدره، در واقع یک نمونه از نوع فرزند هست". اگه اشتباه کرده باشید، در زمان اجرا با خطای InvalidCastException مواجه میشید.
Stock msft = new Stock();
Asset a = msft; // Upcast
// Downcast موفقیت‌آمیز
Stock s = (Stock)a;
Console.WriteLine(s.SharesOwned); // <بدون خطا>
// --- مثال خطا ---
House h = new House();
Asset a2 = h; // Upcast
// ❌ Downcast ناموفق! a2 یک Stock نیست.
// Stock s2 = (Stock)a2; // در زمان اجرا خطای InvalidCastException می‌دهد


🤔 حرف حساب و تجربه شما

درک درست Upcasting و Downcasting، کلید استفاده امن و قدرتمند از چندریختی در کدهای شماست. (در آینده با روش‌های امن‌تر Downcasting مثل as و is آشنا میشیم).

بهترین مثالی که از قدرت چندریختی تو پروژه‌هاتون دیدید چی بوده؟ آیا تا حالا به خطای InvalidCastException به خاطر یه Downcast اشتباه برخورد کردید؟

🔖 هشتگ‌ها:
#OOP #Polymorphism #Casting
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →