معدّلات الوصول (المحددات) في C# مع أمثلة البرامج

⚡ ملخص ذكي

مُعدِّلات الوصول في لغة C# هي كلمات مفتاحية تُحدِّد مستوى رؤية فئة أو خاصية أو دالة، مما يُقيِّد البرامج الخارجية التي يُمكنها الوصول إليها. تقوم الدوال البانية بتهيئة قيم الحقول تلقائيًا عند إنشاء كائن من الفئة.

  • 🔐 خاصة: يحد مُعدِّل الوصول الخاص من عضو في نفس الفئة، مما يمنع الوصول إليه من أي برنامج خارجي.
  • 🌐 عامة: يُتيح مُعدِّل الوصول العام إمكانية الوصول إلى خاصية أو طريقة لأي برنامج خارجي دون قيود.
  • 🛡️ محمي: لا يشارك مُعدِّل الوصول المحمي الأعضاء إلا مع الفئات الموروثة من الفئة الحالية.
  • 📦 الداخلية: يسمح مُعدِّل الوصول الداخلي بالوصول داخل نفس التجميعة ولكن ليس من برنامج خارجي.
  • ؟؟؟؟ ️ البناء: يشترك المُنشئ في اسم الفئة، ولا يأخذ نوع إرجاع، ويقوم بتهيئة الحقول عند إنشاء كائن.
  • 🤖 مساعدة الذكاء الاصطناعي: يقوم GitHub Copilot بإنشاء المُعدِّلات والمنشئات، بينما يقوم ML.NET بربط خصائص الفئة بميزات النموذج.

مُعدِّلات الوصول (المُحدِّدات) في لغة C#

ما هو معدل الوصول (المحدد) في C#؟

معدِّلات الوصول تُعدّ مُحدِّدات الوصول في لغة C# كلمات مفتاحية تُستخدم لتحديد مستوى رؤية خاصية أو دالة في فئة ما. يُستخدم هذا النوع من المُحدِّدات عندما لا ترغب في أن تتمكن البرامج الأخرى من رؤية خصائص أو دوال الفئة. تُقيِّد مُعدِّلات الوصول الوصول إلى هذه الخصائص والدوال، بحيث لا تتمكن البرامج الأخرى من رؤيتها.

هناك 6 أنواع من معدّلات الوصول في C#:

  • خاص
  • عام
  • محمي
  • داخلي
  • الداخلية المحمية
  • محمية خاصة

سوف نتعرف على معدّلات الوصول الرئيسية في لغة C# مع أمثلة البرامج كما هو موضح أدناه.

معدّلات الوصول الخاصة في C#

عندما يتم إرفاق معدل الوصول الخاص إلى خاصية أو طريقة، فهذا يعني أنه لا يمكن الوصول إلى هؤلاء الأعضاء من أي برنامج خارجي.

مثال على معدّل الوصول الخاص

لنأخذ مثالاً ونرى ما يحدث عندما نستخدم معدّل الوصول الخاص.

لنقم بتعديل الكود الحالي في ملف Tutorial.cs الخاص بنا. في طريقة SetTutorial، دعنا نغير الكلمة الأساسية العامة إلى خاصة.

معدّلات الوصول الخاصة

الآن دعنا ننتقل إلى ملف Program.cs الخاص بنا. ستلاحظ وجود خط أحمر متعرج أسفل طريقة SetTutorial.

نظرًا لأننا أعلنا الآن أن طريقة SetTutorial خاصة في فئة Tutorial الخاصة بنا، فقد اكتشف Visual Studio هذا الأمر. وأخبر المستخدم من خلال تسليط الضوء عليه أن هذه الطريقة لن تعمل الآن من ملف Program.cs.

معدّل الوصول الخاص

معدّلات الوصول العامة في C#

عندما يتم إرفاق معدل الوصول العام إلى خاصية أو طريقة، فهذا يعني أنه يمكن الوصول إلى هؤلاء الأعضاء من أي برنامج خارجي. لقد رأينا هذا بالفعل في أمثلةنا السابقة.

مثال على معدّل الوصول العام

معدّلات الوصول العامة في C#

نظرًا لأننا قمنا بتعريف أساليبنا على أنها عامة في فئة البرنامج التعليمي، فيمكن الوصول إليها من ملف Program.cs.

معدّلات الوصول المحمية في C#

عندما يتم إرفاق معدل الوصول المحمي بخاصية أو طريقة، فهذا يعني أنه لا يمكن الوصول إلى هؤلاء الأعضاء إلا عن طريق الطبقات الموروثة من التيار فئة. سيتم شرح ذلك بمزيد من التفصيل في فئة الميراث.

معدّلات الوصول الداخلي في C#

عندما يتم إرفاق معدّل الوصول الداخلي إلى خاصية أو أسلوب، يمكن الوصول إلى هؤلاء الأعضاء فقط عن طريق برنامج داخلي وليس عن طريق برنامج خارجي.

منشئ C #

C# يتم استخدام المنشئين لتهيئة قيم حقول الفئة عند إنشاء الكائنات المقابلة لها. المنشئ هو أسلوب له نفس اسم الفئة. إذا تم تعريف المُنشئ في فئة ما، فسوف يوفر الطريقة الأولى التي يتم استدعاؤها عند إنشاء كائن. لنفترض أنه إذا كان لدينا فئة تسمى الموظف. سيتم أيضًا تسمية طريقة المنشئ باسم الموظف ().

هناك أمور أساسية يجب ملاحظتها فيما يتعلق بطرق البناء

  1. يجب أن يكون معدل الوصول الافتراضي لـ C# للمنشئ عامًا.
  2. يجب ألا يكون هناك نوع إرجاع لأسلوب المُنشئ.

مثال على منشئ C#

دعونا الآن نرى كيف يمكننا دمج مستخدم المنشئات في الكود الخاص بنا. سنستخدم المنشئات لتهيئة حقلي TutorialID وTutorialName لبعض القيم الافتراضية عند إنشاء الكائن.

الخطوة 1) الخطوة الأولى هي إنشاء المنشئ لفصلنا التعليمي. في هذه الخطوة، نضيف الكود أدناه إلى ملف Tutorial.cs.

منشئ C #

Code تفسير:-

  1. نقوم أولاً بإضافة طريقة جديدة لها نفس اسم الفئة. نظرًا لأنه يحمل نفس اسم الفئة، فإن C# يعامل هذا كأسلوب منشئ. والآن، عندما تقوم طريقة الاستدعاء بإنشاء كائن من هذه الفئة، سيتم استدعاء هذه الطريقة افتراضيًا.
  2. في مُنشئ البرنامج التعليمي، نقوم بتعيين قيمة TutorialID على 0 وTutorialName على "Default". لذا، كلما تم إنشاء كائن، ستحتوي هذه الحقول دائمًا على هذه القيم الافتراضية.

لننتقل الآن إلى ملف Program.cs ونزيل السطر الذي يستدعي طريقة SetTutorial. هذا لأننا نريد فقط أن نرى كيف يعمل المنشئ.

منشئ C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public Tutorial()
  {
   TutorialID=0;
   TutorialName="Default";
  }
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code تفسير:-

  1. الخطوة الأولى هي إنشاء كائن لفئة البرنامج التعليمي. ويتم ذلك عبر الكلمة الأساسية "الجديدة".
  2. نستخدم طريقة GetTutorial من فئة Tutorial للحصول على TutorialName. ثم يتم عرض هذا على وحدة التحكم عبر طريقة Console.WriteLine.

إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج، سيتم عرض الإخراج التالي.

الإخراج:

منشئ C #

من المخرجات، يمكننا أن نرى أنه تم بالفعل استدعاء المنشئ وأنه تم تعيين قيمة TutorialName على "Default".

ملاحظة: هنا يتم جلب القيمة "الافتراضية" من المُنشئ.

الأسئلة الشائعة

إذا لم يتم تحديد أي مُعدِّل، فإن أعضاء الفئة والبنية يكونون افتراضيًا خاصين، والأنواع ذات المستوى الأعلى تكون داخلية، وتبقى مخفية حتى تقوم بتوسيع نطاق رؤيتها.

يُعرّض النوع Protected العضو لنفس الفئة وأي فئة مشتقة منها، حتى عبر التجميعات. أما النوع Internal فيُعرّضه فقط للأنواع الموجودة في نفس التجميع.

يسمح النوع "protected internal" بالوصول من نفس التجميعة أو أي فئة مشتقة منها. أما النوع "private protected" فهو أكثر صرامة، إذ يسمح فقط للفئات المشتقة بالوصول داخل نفس التجميعة.

تدعم لغة C# المُنشئات الافتراضية، والمُنشئات المُعاملة، ومُنشئات النسخ، والمُنشئات الثابتة، والمُنشئات الخاصة. تقوم هذه المُنشئات بتهيئة حقول الكائن، أو تشغيل إعداد الفئة مرة واحدة، أو استنساخ قيم كائن آخر.

لا يأخذ المُنشئ الثابت أي مُعدِّلات أو مُعاملات. يتم تشغيله مرة واحدة، قبل إنشاء الكائن الأول أو تحميل الأعضاء الثابتة، لتهيئة الحقول الثابتة.

نعم. يمكن للفئة تعريف عدة دوال إنشاء بقوائم معاملات مختلفة. يختار المترجم الدالة التي تتطابق مع الوسائط المُمررة إلى الدالة الجديدة.

نعم. يقترح GitHub Copilot المُعدِّلات، والمنشئات، ومُهيئات الحقول من اسم الفئة أو التعليق داخل Visual Studio و VS Code. Revاطلع على كل مستوى رؤية مقترح.

يقوم ML.NET بربط الخصائص العامة لفئة بيانات C# بميزات النموذج وتصنيفاته. وتتيح دوال الوصول والتعديل العامة قراءة هذه القيم أثناء التدريب.

تلخيص هذه التدوينة بـ: