📦 کلاس در کلاس: راهنمای کامل Nested Types در #C
تا حالا شده یه کلاسی بنویسید که اونقدر به یه کلاس دیگه وابسته باشه که انگار باید جزئی از اون باشه؟ یا بخواید یه کلاس کمکی بسازید که فقط و فقط توسط یک کلاس دیگه استفاده میشه؟
سیشارپ برای این سناریوها یه راه حل خیلی تمیز و قدرتمند داره: Nested Types (تایپهای تودرتو).
1️⃣ Nested Type چیست؟
یه Nested Type، یک تایپ (class, struct, enum, ...) است که داخل یک کلاس یا struct دیگه تعریف میشه. مثل یه جعبهی کوچیک، داخل یه جعبهی بزرگتر.
public class TopLevel
{
public class Nested { } // کلاس تودرتو
public enum Color { Red, Blue, Tan } // enum تودرتو
}
برای دسترسی به یک Nested Type از بیرون، باید اون رو با اسم کلاس بیرونی مشخص کنید:
TopLevel.Nested n = new TopLevel.Nested();
TopLevel.Color color = TopLevel.Color.Red;
2️⃣ ابرقدرتهای Nested Types 🦸♂️
چرا باید از یه Nested Type استفاده کنیم؟ چون چند تا قدرت ویژه دارن که کلاسهای معمولی ندارن:
دسترسی به اعضای private: 🔐
مهمترین قدرتشون اینه که میتونن به اعضای private و protected کلاسی که داخلش هستن، دسترسی داشته باشن! این یعنی یه سطح کپسولهسازی فوقالعاده.
public class TopLevel
{
private static int x = 10;
class Nested
{
// Nested به فیلد private کلاس TopLevel دسترسی داره!
static void Foo() => Console.WriteLine(TopLevel.x);
}
}
سطوح دسترسی بیشتر: 🛡
میتونن هر Access Modifierی داشته باشن (public, private, protected و...). این در حالیه که کلاسهای معمولی فقط میتونن public یا internal باشن. پیشفرض دسترسی برای Nested Typeها، private هست.
3️⃣ قانون طلایی: کی از Nested Type استفاده کنیم؟ 🎯
این مهمترین بخش ماجراست.
❌ دلیل اشتباه: استفاده از Nested Type برای جلوگیری از شلوغ شدن namespace. برای این کار از namespace تودرتو استفاده کنید.
✅ دلایل درست: فقط زمانی از Nested Type استفاده کنید که:
• کلاس داخلی شما به شدت به کلاس بیرونی وابسته است و به اعضای private اون نیاز مستقیم داره.
• میخواید با استفاده از Access Modifierها (مثل private یا protected)، اون کلاس رو از دنیای بیرون کاملاً مخفی کنید و به عنوان یه جزئیات پیادهسازی داخلی نگهش دارید.
🤔 حرف حساب و تجربه شما
Nested Types
یه ابزار قدرتمند برای کپسولهسازی پیشرفته هستن، به شرطی که به جا و درست ازشون استفاده بشه.
🔖 هشتگها:
#CSharp #DotNet #OOP #Encapsulation