🛡راهنمای کامل Access Modifiers در #C: چه کسی کد شما را میبیند؟
در برنامهنویسی شیءگرا، کپسولهسازی (Encapsulation) یعنی مخفی کردن جزئیات پیادهسازی و فقط نمایش دادن چیزهای ضروری. ابزار اصلی ما برای این کار در C# Access Modifiers هست.
این کلمات کلیدی، نگهبانان کد شما هستن و مشخص میکنن که هر کلاس یا عضو اون، از کجا قابل دسترسیه.
معرفی نگهبانان
🌍 public (عمومی):
دربهای کاملاً باز! هر کسی از هر جایی (چه داخل اسمبلی و چه بیرون) میتونه ببینه و استفاده کنه.
🏢 internal (داخلی):
فقط خودیها! فقط کدهای داخل همون اسمبلی (پروژه) میتونن ببینن. این حالت پیشفرض برای کلاسهای غیر تودرتو است.
🔐 private (خصوصی):
راز شخصی! فقط کدهای داخل همون کلاس یا struct میتونن ببینن. این حالت پیشفرض برای اعضای کلاسها (مثل فیلدها و متدها) هست.
👨👩👧 protected (محافظت شده):
فقط خانواده! فقط کدهای داخل همون کلاس و کلاسهای فرزندی که ازش ارثبری کردن، میتونن ببینن.
🤝 protected internal:
خودیها و خانواده! اجتماع protected و internal. یعنی هم از داخل اسمبلی جاری دیده میشه و هم توسط کلاسهای فرزند (حتی اگه تو یه اسمبلی دیگه باشن).
🤫 private protected:
فقط خانوادهی خودی! اشتراک protected و internal. یعنی فقط توسط کلاسهای فرزندی که در همون اسمبلی هستن، دیده میشه. این سطح دسترسی از protected و internal به تنهایی، محدودتره.
📄 file (از C# 11):
فقط همین فایل! اعضایی که با file مشخص میشن، فقط در همون فایلی که تعریف شدن، قابل مشاهده هستن. این بیشتر برای Source Generatorها کاربرد داره.
نکات حرفهای (Pro Tips) 💡
Friend Assemblies:
گاهی وقتا میخواید به یه پروژه دیگه (مثل پروژه تست) اجازه بدید که به اعضای internal شما دسترسی داشته باشه. با اتریبیوت [assembly: InternalsVisibleTo("FriendAssemblyName")] در فایل AssemblyInfo.cs یا .csproj میتونید این کار رو انجام بدید.
Accessibility Capping (سقف دسترسی):
سطح دسترسی یک تایپ، سطح دسترسی اعضای public اون رو محدود میکنه. یعنی یه متد public داخل یه کلاس internal، در عمل internal حساب میشه.
🤔 حرف حساب و تجربه شما
انتخاب درست Access Modifier، یکی از مهمترین تصمیمها در طراحی APIهای تمیز و قابل نگهداریه.
🔖 هشتگها:
#OOP #Encapsulation