کپسوله سازی در سی شارپ

کپسوله سازی (encapsulation) در سی شارپ (#C)

کپسوله سازی به معنای “قراردادن یک یا چند آیتم در یک بسته یا پکیج فیزیکی یا منطقی” است. کپسوله کردن در برنامه نویسی شی گرا دسترسی به جزئیات پیاده سازی را محدود می کند.

انتزاع (abstraction) و کپسوله سازی (encapsulation) در برنامه نویسی شی گرا ویژگی هایی مرتبط به هم دارند. انتزاع اجازه می دهد اطلاعات مربوطه نمایش داده شوند و کپسوله سازی به برنامه نویس این امکان را می دهد که سطح دلخواه از انتزاع را پیاده سازی کند.

کپسوله سازی توسط مشخصه های سطوح دسترسی (access specifiers) پیاده سازی شده است. مشخصه های سطح دسترسی محدوده ی اعضای کلاس را مشخص می کنند.

انواع مشخصه های سطح دسترسی در سی شارپ (#C)

  • public
  • private
  • protected
  • internal
  • protected internal

public:

سطح دسترسی public اجازه می دهد که یک کلاس متغیر ها و توابعش را به سایر توابع و object ها نشان دهد. هر عضوی که public باشد از خارج از کلاس قابل دسترسی است.

مثال

Class Student{
    public string Name;
    public string Family;
    public void Display(){
        Console.WriteLine(Name + " " + Family);
    }
}
Class InitStudent{
static void Main (string [] srgs){
        Student stu = new Student();
        stu.Name = "fateme";
        stu.Family = "ghazizade";
        stu.Display();
        Console.ReadLine();
    }
}

خروجی مثال بالا بصورت زیر است:

fateme ghazizade

در مثال بالا متغیر های Name و Family به صورت public تعریف شده اند. در نتیجه در Main می توان به آن ها دسترسی داشت. این فیلد ها از طریق شی ای که از کلاس Student ساخته شده قابل دسترسی اند. هم چنین متد Display()نیز به همین طریق قابل دسترسی است.

private:

سطح private به یک کلاس این امکان را می دهد که متغیر ها و توابعش را از سایر توابع و اشیا (object) ها مخفی نگه دارد.

تنها توابع همان کلاس امکان دسترسی به اعضای private را دارند. حتی یک instance از یک کلاس اجازه دسترسی به اعضای private را ندارد.

مثال

Class Student{
    private string Name;
    private string Family;
    public void GetData(){
        Console.WriteLine("enter Name");
        Name = Console.ReadLine();
        Console.WriteLine("enter Family");
        Family = Console.ReadLine();
}
public void Display(){
        Console.WriteLine(Name + " " + Family);
}
}
Class InitStudent{
static void Main (string [] srgs){
        Student stu = new Student();
        stu.GetData();
        stu.Display();
        Console.ReadLine();
    }
}

در مثال بالا متغیر های Name و Family بصورت private تعریف شده اند. لذا از تابع Main قابل دسترسی نیستند. اما توابع GetDate() و Display() که عضو های همان کلاس Student می باشند به این فیلد ها دسترسی دارند و از تابع Main در دسترس هستند. بنابراین برای دستیابی به متغیر های کلاس باید به همان صورتی که در مثال بالا گفته شده عمل کرد.

protected:

سطح دسترسی protected به یک کلاس فرزند اجازه می دهد به متغیر ها و توابع کلاس پایه یا والدش دسترسی داشته باشد. این سطح دسترسی برای پیاده سازی بحث ارث بری مورد استفاده قرار می گیرد.

internal:

سطح دسترسی internal به یک کلاس اجازه می دهد که متغیر ها و توابعش را به سایر توابع و اشیا (objects) در همان پروژه نمایش دهد. به عبارتی هر عضوی که با این سطح دسترسی تعریف شده باشد توسط تمامی کلاس ها یا متد هایی که در همان برنامه هستند قابل دسترسی می باشد.

مثال

Class Student{
    internal string Name;
    internal string Family;
public void Display(){
        Console.WriteLine(Name + " " + Family);
}
}
Class InitStudent{
static void Main (string [] srgs){
        Student stu = new Student();
        stu.Name = "fateme";
        stu.Family = "ghazizade";
        stu.Display();
        Console.ReadLine();
    }
}

خروجی مثال بالا بصورت زیر است:

fateme ghazizade

protected internal:

این سطح دسترسی به یک کلاس اجازه می دهد که متغیر ها و توابعش را از دید سایر اشیا و توابع سایر کلاس ها مخفی سازد به جز کلاس فرزند در همان برنامه. این نوع دسترسی نیز در زمان پیاده سازی ارث بری مورد استفاده قرار می گیرد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *