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

🏛 کالبدشکافی وراثت در #C: سازنده‌ها، required و ترتیب اجرا

وقتی کلاس‌های فرزند می‌خوان آبجکت بسازن، چه اتفاقی پشت صحنه میفته؟ امروز به عمیق‌ترین قوانین ساخت و ساز در سلسله‌مراتب وراثت شیرجه می‌زنیم.

1️⃣ کلیدواژه base: صحبت با کلاس پدر

base
به شما اجازه میده از داخل کلاس فرزند، به اعضای کلاس پدر دسترسی داشته باشید. دو کاربرد اصلی داره:

صدا زدن عضو بازنویسی شده:
اگه متدی رو override کردید، با base می‌تونید به پیاده‌سازی اصلی در کلاس پدر دسترسی پیدا کنید.
public override decimal Liability => base.Liability + Mortgage;

صدا زدن سازنده پدر:
با سینتکس : base(...) صراحتاً سازنده مورد نظرتون در کلاس پدر رو صدا می‌زنید.
public class Subclass : Baseclass
{
public Subclass(int x) : base(x) { }
}


2️⃣ قوانین سازنده‌ها در وراثت ⚖️

• قانون اول: سازنده کلاس پدر همیشه قبل از سازنده کلاس فرزند اجرا میشه.

• قانون دوم (تله مهم): اگه شما : base(...) رو ننویسید، #C به صورت خودکار سعی می‌کنه سازنده بدون پارامتر پدر رو صدا بزنه. اگه کلاس پدر سازنده بدون پارامتر نداشته باشه، خطای زمان کامپایل می‌گیرید!

3️⃣ required members (از C# 11):

جایگزین مدرن ✨
گاهی وقتا زنجیره سازنده‌ها خیلی طولانی میشه. از #C 11 به بعد، می‌تونید پراپرتی‌ها یا فیلدهایی رو با کلمه کلیدی required مشخص کنید. این یعنی هر کسی که از کلاس شما آبجکت می‌سازه، مجبوره که این اعضا رو با استفاده از Object Initializer مقداردهی کنه.
public class Asset
{
public required string Name;
}
// ✅ درسته
Asset a1 = new Asset { Name = "House" };

// ❌ خطای زمان کامپایل! چون Name مقداردهی نشده
Asset a2 = new Asset();


💡نکته: برای اینکه به یک سازنده اجازه بدید این قانون رو دور بزنه، می‌تونید از اتریبیوت [SetsRequiredMembers] استفاده کنید.

4️⃣ ترتیب دقیق ساخت (Deep Dive) 🔬

وقتی یه آبجکت فرزند ساخته میشه، ترتیب اجرای دقیق عملیات به این صورته:

فاز اول (از فرزند به پدر):
•فیلدهای کلاس فرزند مقداردهی اولیه میشن.

• آرگومان‌های پاس داده شده به base(...) ارزیابی میشن.

• این روند تا بالاترین کلاس در سلسله‌مراتب ادامه پیدا می‌کنه.

فاز دوم (از پدر به فرزند):
• حالا بدنه‌ی سازنده‌ها، از کلاس پدر شروع شده و به سمت کلاس فرزند اجرا میشن.

مثال کتاب برای درک بهتر این ترتیب:
public class B
{
int x = 1; // مرحله ۳: این اجرا میشه
public B(int x)
{
// مرحله ۴: بدنه سازنده پدر اجرا میشه
}
}
public class D : B
{
int y = 1; // مرحله ۱: این اول از همه اجرا میشه
public D(int x)
: base(x + 1) // مرحله ۲: آرگومان base ارزیابی میشه
{
// مرحله ۵: بدنه سازنده فرزند در آخر اجرا میشه
}
}

🤔 حرف حساب و تجربه شما
درک این جزئیات، شما رو به یک متخصص واقعی در طراحی کلاس‌های شیءگرا تبدیل می‌کنه.

🔖 هشتگ‌ها:
#OOP #Inheritance #BestPractices #Constructor
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 →