محددات الوصول (Access Modifiers) في C# ببساطة 🚀
محددات الوصول هي كلمات تُستخدم للتحكم في إمكانية الوصول إلى المتغيرات، والخصائص (Properties)، والدوال (Methods)، والفئات (Classes) في C#.
الأنواع الرئيسية لمحددات الوصول
| المحدد | يمكن الوصول إليه من | مثال |
|---|---|---|
public |
أي مكان في المشروع | مثل رقم هاتف عام يمكن للجميع رؤيته |
private |
داخل نفس الفئة فقط | مثل بياناتك السرية في المنزل |
protected |
داخل نفس الفئة والفئات المشتقة | مثل نصيحة عائلية لا يعرفها إلا الأبناء |
internal |
داخل نفس المشروع (Assembly) | مثل معلومات خاصة داخل الشركة |
protected internal |
داخل نفس المشروع أو الفئات المشتقة | مزيج من protected و internal |
private protected |
داخل نفس الفئة أو الفئات المشتقة داخل نفس المشروع | مزيج من private و protected |
1. public - عام (متاح للجميع)
🔹 يمكن الوصول إليه من أي مكان في البرنامج.
public class Car
{
public string brand = "Toyota";
}
استخدامه:
Car myCar = new Car();
Console.WriteLine(myCar.brand); // ✅ يمكن الوصول إليه
2. private - خاص (مخفي عن الخارج)
🔹 يمكن الوصول إليه فقط داخل نفس الفئة.
class Car
{
private string secretCode = "ABC123"; // لا يمكن الوصول إليه من خارج الفئة
}
خطأ عند المحاولة من الخارج:
Car myCar = new Car();
Console.WriteLine(myCar.secretCode); // ❌ خطأ! لا يمكن الوصول
✅ الحل؟ استخدم public Method للوصول إليه:
class Car
{
private string secretCode = "ABC123";
public string GetSecretCode()
{
return secretCode; // يمكن الوصول إليه داخل الفئة
}
}
3. protected - محمي (متاح للفئات المشتقة فقط)
🔹 يمكن الوصول إليه داخل نفس الفئة والفئات المشتقة فقط.
class Car
{
protected string engine = "V8";
}
class SportsCar : Car
{
public void ShowEngine()
{
Console.WriteLine(engine); // ✅ يمكن الوصول إليه هنا
}
}
❌ لكن لا يمكن الوصول إليه من كائن خارجي:
Car myCar = new Car();
Console.WriteLine(myCar.engine); // ❌ خطأ!
4. internal - داخلي (متاح داخل نفس المشروع فقط)
🔹 يمكن الوصول إليه فقط داخل نفس المشروع (Assembly).
internal class Car
{
internal string model = "Corolla";
}
✅ يعمل داخل نفس المشروع، لكنه غير متاح إذا استوردته من مشروع آخر.
5. protected internal - مزيج من protected و internal
🔹 يمكن الوصول إليه داخل نفس المشروع، أو عبر فئة مشتقة حتى لو كانت في مشروع آخر.
class Car
{
protected internal string color = "Red";
}
✅ متاح داخل المشروع.
✅ متاح للفئات المشتقة في مشاريع أخرى.
6. private protected - أكثر تقييدًا
🔹 متاح فقط داخل نفس الفئة أو الفئات المشتقة داخل نفس المشروع.
class Car
{
private protected string tires = "Michelin";
}
❌ لا يمكن الوصول إليه من مشروع آخر، حتى لو كانت الفئة مشتقة.
ملخص سريع 🏆
- ✅
public→ متاح في كل مكان. - ❌
private→ متاح داخل الفئة فقط. - 🔒
protected→ متاح داخل الفئة والفئات المشتقة فقط. - 🏢
internal→ متاح داخل نفس المشروع فقط. - 🔄
protected internal→ متاح داخل المشروع + الفئات المشتقة في مشاريع أخرى. - 🔐
private protected→ متاح داخل الفئة والفئات المشتقة داخل نفس المشروع فقط.
🎯 متى أستخدم كل واحد؟
public→ إذا كنت تريد أن يكون العنصر متاحًا للجميع.private→ إذا كنت تريد إخفاء البيانات وعدم السماح بالوصول المباشر.protected→ إذا كنت تريد أن تستخدم الفئات المشتقة هذا العنصر فقط.internal→ إذا كان العنصر خاصًا بمشروع واحد فقط.protected internal→ إذا كنت تريد مشاركة العنصر داخل المشروع + الفئات المشتقة خارج المشروع.private protected→ إذا كنت تريد مشاركة العنصر داخل الفئة والفئات المشتقة في نفس المشروع فقط.
🔹 القاعدة الذهبية: استخدم private كلما أمكن لحماية بياناتك، ثم افتح الوصول عند الحاجة باستخدام محددات أخرى. 🚀
تعليقات
إرسال تعليق