کپسوله سازی (Encapsulation) در سی شارپ – آموزش سی شارپ

۱۳۹۷-۰۹-۱۶
کپسوله سازی (Encapsulation) در سی شارپ کپسوله سازی (Encapsulation) در سی شارپ به عنوان فرآیند محصور کردن یک یا چند آیتم در یک بسته فیزیکی و یا منطقی تعریف شده است. این مفهوم در برنامه نویسی شیء گرا به جلوگیری از دسترسی به جزئیات پیاده سازی اطلاق می شود. Abstraction و Encapsulation دو ویژگی مرتبط در برنامه نویسی شیء گرا هستند. Abstraction ...

csharp encapsulation 4469 کپسوله سازی (Encapsulation) در سی شارپ   آموزش سی شارپ

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

کپسوله سازی (Encapsulation) در سی شارپ به عنوان فرآیند محصور کردن یک یا چند آیتم در یک بسته فیزیکی و یا منطقی تعریف شده است. این مفهوم در برنامه نویسی شیء گرا به جلوگیری از دسترسی به جزئیات پیاده سازی اطلاق می شود.

Abstraction و Encapsulation دو ویژگی مرتبط در برنامه نویسی شیء گرا هستند. Abstraction اجازه می دهد تا اطلاعات مربوطه قابل مشاهده باشد و کپسوله سازی یک برنامه نویس را قادر می سازد تا سطوح مناسبی از Abstraction را پیاده سازی کند. کپسوله سازی با استفاده از مشخصه های دسترسی پیاده سازی می شود. مشخصه دسترسی، دامنه و محدوده یک عضو از کلاس را مشخص می کند.

زبان برنامه نویسی C# از مشخصه های دسترسی زیر پشتیبانی می کند:

  • Public
  • Private
  • Protected
  • Internal
  • Protected internal

مشخصه دسترسی عمومی (Public)

مشخصه دسترسی عمومی به یک کلاس در زبان سی شارپ اجازه می دهد تا بتواند متغیرهای عضو، توابع و اشیاء دیگر خود را در اختیار سایر کلاس ها قرار دهد. هر عضوی که به صورت عمومی تعریف شود، خارج از آن کلاس هم قابل دسترسی است.

مثال زیر این موضوع را نشان می دهد:

using System;
namespace RectangleApplication {
   class Rectangle {
      //member variables
      public double length;
      public double width;
      public double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

امتحان کنید

زمانی که کد بالا توسط کامپایلر زبان سی شارپ اجرا شود، نتیجه زیرا را تولید خواهد کرد:

Length: 4.5
Width: 3.5
Area: 15.75

در کد بالا، متغیرهای عضو length و width به صورت عمومی (public) تعریف شده اند، بنابراین خارج از کلاس قابل دسترسی هستند. توابع عضو GetArea() و Display() چون عضو همان کلاس هستند می توانند به طور مستقیم به این متغیرهای عضو دسترسی داشته باشند، بدون این که نیاز باشد از آن کلاس نمونه سازی کنند.

مشخصه دسترسی خصوصی (Private)

مشخصه دسترسی خصوصی به کلاس اجازه می دهد تا متغیرهای عضو، توابع و سایر اشیاء خود را پنهان کند. فقط توابعی که در آن کلاس تعریف شده اند می توانند به اعضای خصوصی (private) دسترسی داشته باشند.

مثال زیر این موضوع را نشان می دهد:

using System;
namespace RectangleApplication {
   class Rectangle {
      //member variables
      private double length;
      private double width;
      public void Acceptdetails() {
         Console.WriteLine("Enter Length: ");
         length = Convert.ToDouble(Console.ReadLine());
         Console.WriteLine("Enter Width: ");
         width = Convert.ToDouble(Console.ReadLine());
      }
      public double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine();
      }
   }
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیرا را تولید خواهد کرد:

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

در کد بالا به خاطر این که متغیرهای عضو length و Width به صورت خصوصی تعریف شده اند، در خارج از کلاس قابل دسترسی نیستند. اما توابع عضو Display() و Acceptdetails() که عضو همان کلاس هستند، به طور مستقیم می توانند به این متغیرها دسترسی داشته باشند.

مشخصه دسترسی محافظت شده (Protected)

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

مشخصه دسترسی داخلی (Internal)

مشخصه دسترسی عمومی به یک کلاس اجازه می دهد تا بتواند متغیرهای عضو، توابع و اشیاء دیگر خود را در اختیار سایر کلاس های موجود در assembly فعلی قرار دهد. به عبارت دیگر کلاسی که در فایل sample.dll به صورت internal تعریف شده باشد، در فایل های دیگر مانند other.dll قابل دسترسی نیست.

مثال زیر این موضوع را نشان می دهد:

using System;
namespace RectangleApplication {
   class Rectangle {
      //member variables
      internal double length;
      internal double width;
      double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Length: 4.5
Width: 3.5
Area: 15.75

در کد بالا تابع GetArea() بدون مشخصه دسترسی تعریف شده است و از آنجایی که مشخصه دسترسی پیش فرض private می باشد، این تابع نیز مشخصه خصوصی را می گیرد و خارج از کلاس قابل دسترسی نیست.

مشخصه دسترسی محافظت شده داخلی (Protected Internal)

این مشخصه ترکیبی از دو مشخصه Protected و Internal می باشد، به این معنی که هم داخل Assembly فعلی قابل دسترسی است و هم در کلاس های فرزند. این مشخصه هم بیشتر در مبحث ارث بری مورد استفاده قرار می گیرد.

نوشته کپسوله سازی (Encapsulation) در سی شارپ – آموزش سی شارپ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.