طرق الوصول في لغة السي شارب

طرق الوصول في لغة السي شارب (Access Modifiers) 2023

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

class Student {

  public string name;
    
  private int num;

  }

هنا،

name: هو حقل عام، لذلك يمكن الوصول له من أي مكان.

num: هو حقل خاص، لذلك يمكن الوصول له ضمن الصف Student فقط.

طرق الوصول في لغة السي شارب

  • public
  • private
  • protected
  • internal

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

الوصول العام

عندما نعرف نوع أو عضو من نوع على انه public فهذا يعني انه من الممكن الوصول له من أي مكان.

المثال

using System;

namespace MyApplication {

  class Student {
    public string name = "Sheeran";
      
    public void print() {
      Console.WriteLine("Hello from Student class");
     }
  }

  class Program {
    static void Main(string[] args) {
    
      // تعريف كائن من الصف 
      Student student1 = new Student();
      
      // الوصول للحقل وطباعته
      Console.WriteLine("Name: " + student1.name);

      // الوصول للدالة
      student1.print();
      Console.ReadLine();
    }
  }
}

الخرج

Name: Sheeran
Hello from Student class

في المثال أعلاه، قمنا بتعريف صف واسمه Student، مع حقل اسمه name ودالة اسمها ()print.وبكون الحقل والدالة من النوع public، يمكننا الوصول لهم من الصف program.

//الوصول للحقل وطباعته 
Console.WriteLine("Name: " + student1.name);

// الوصول للدالة
student1.print();

لقد استخدمنا الكائن student1 من الصف student للوصول للدالة والعضو.لمعرفة المزيد حول الكائن والصفوف، اطلع على المقال الخاص بهذه المفاهيم من هنا.

الوصول الخاص

عندما نقوم بتعريف عضو ما مع طريقة الوصول الخاص (private)، فأنه لن يكون بالإمكان الوصول إليه إلا من ضمن نفس الصف (Class) أو البنية (Struct).

المثال

using System;

namespace MyApplication {

  class Student {
    private string name = "Sheeran";
      
    private void print() {
      Console.WriteLine("Hello from Student class");
     }
  }

  class Program {
    static void Main(string[] args) {
    
      //إنشاء كائن من الصف طالب(Student)
      Student student1 = new Student();
      
      // الوصول إلى الحقل name
      Console.WriteLine("Name: " + student1.name);

      // الوصول للدالة
      student1.print();

      Console.ReadLine();
    }
  }
}

في المثال أعلاه، قمنا بتعريف الصف Student مع الحقل name والدالة ()print.

// الوصول للحقل
Console.WriteLine("Name: " + student1.name);

//الوصول للدالة
student1.print();

هنا، الحقل (Name) والدالة (print)، الوصول لهما من النوع الخاص (private)، لذلك لا يمكن الوصول لهما من الصف Program بل فقط من الصف الخاص بهما، لذلك سوف ينتج عن البرنامج أعلاه الخطأ التالي:

Error    CS0122    'Student.name' is inaccessible due to its protection level    
Error    CS0122    'Student.print()' is inaccessible due to its protection level 

الوصول المحمي

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

مثال

using System;

namespace MyApplication {

  class Student {
    protected string name = "Sheeran";
  }

  class Program {
    static void Main(string[] args) {
    
      // تعريف كائن
      Student student1 = new Student();
      
      // الوصول للحقل
      Console.WriteLine("Name: " + student1.name);
      Console.ReadLine();
    }
  }
}

في المثال أعلاه، أنشأنا صف اسمه Student، وله الحقل name، وبما أن الحقل له نوع الوصول (محمي لن يكون من الممكن الوصول له من الصف Program.

البرنامج أعلاه سوف ينتج عنه الخطأ التالي:

Error    CS0122    'Student.name' is inaccessible due to its protection level 

الآن، دعنا نحاول الوصول للحقل المحمي من صف وارث للصف الخاص بالحقل المحمي (أو يقال صف مشتق من الصف الخاص بالحقل المحمي).

using System;

namespace MyApplication {

  class Student {
    protected string name = "Sheeran";
  }
  
  // صف مشتق أو وارث
  class Program : Student {
    static void Main(string[] args) {

      // إنشاء كائن من الصف الوارث
      Program program = new Program();
      
      //الوصول للحقل المحمي 
      Console.WriteLine("Name: " + program.name);
      Console.ReadLine();
    }
  }
}

الخرج

Name: Sheeran

في المثال أعلاه، أنشاءنا الصف Student، والذي يمتلك الحقل المحمي name.لاحط أننا قمنا بورائة الصف Program من الصف Student.

//الوصول للحقل المحمي
Console.WriteLine("Name: " + program.name);

هنا، أمكننا الوصول للحقل المحمي من صف وارث أو مشتق من الصف المالك للحقل المحمي.

الخلاصة

وهكذا نكون قد وصلنا إلى نهاية هذا المقال، حيث تعرفنا على ثلاث من طرق الوصول في لغة السي شارب، وهي (عام – خاص – محمي)، وهناك أنواع آخرى لن نتطرق لها في هذا المقال، لأنة هدفي منه هو التعريف بالفكرة الأساسية، ومن الممكن أن نتوسع في هذا المقال مستقبلاً.

في الختام، أتمنى منك المشاركة بالتصويت أدناه، ومتابعتي على الفيسبوك، من خلال زيارة الصفحة الرئيسية للموقع.

التصويت‌

التصويت
[poll id=”16″]

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *