C# – کپسولهسازی (Encapsulation)
کپسولهسازی (Encapsulation) در C#
کپسولهسازی به معنای فرآیند قرار دادن یک یا چند آیتم در یک بسته فیزیکی یا منطقی است. در برنامهنویسی شیگرا، کپسولهسازی برای جلوگیری از دسترسی به جزئیات پیادهسازی به کار میرود.
کپسولهسازی با استفاده از مشخصکنندههای دسترسی (Access Specifiers) پیادهسازی میشود. این مشخصکنندهها محدوده و قابلیت مشاهده اعضای کلاس را تعریف میکنند. در C#، مشخصکنندههای دسترسی زیر پشتیبانی میشوند:
- Public: اعضای کلاس با این مشخصکننده میتوانند از هر جایی در برنامه دسترسی پیدا کنند.
- Private: اعضای کلاس با این مشخصکننده فقط از داخل همان کلاس قابل دسترسی هستند.
- Protected: اعضای کلاس با این مشخصکننده فقط از داخل همان کلاس و کلاسهای مشتقشده قابل دسترسی هستند.
- Internal: اعضای کلاس با این مشخصکننده فقط در داخل همان اسمبلی (Assembly) قابل دسترسی هستند.
- Protected Internal: ترکیبی از Protected و Internal که به اعضا اجازه میدهد از داخل اسمبلی فعلی یا از کلاسهای مشتقشده دسترسی پیدا کنند.
مشخصکننده Public
مشخصکننده public
اجازه میدهد که متغیرها و متدهای عضو یک کلاس از بیرون آن کلاس قابل دسترسی باشند.
مثال:
using System;
namespace RectangleApplication {
class Rectangle {
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());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
}
}
}
در این مثال، متغیرهای length
و width
به عنوان عمومی تعریف شدهاند، بنابراین میتوانند از متد Main
به آنها دسترسی پیدا کرد.
مشخصکننده Private
مشخصکننده private
اجازه میدهد که متغیرها و متدهای عضو یک کلاس فقط از داخل همان کلاس قابل دسترسی باشند و از بیرون کلاس، حتی از طریق یک شیء هم قابل دسترسی نیستند.
مثال:
using System;
namespace RectangleApplication {
class Rectangle {
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());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
}
}
}
در این مثال، متغیرهای length
و width
به صورت خصوصی تعریف شدهاند و فقط از طریق متدهای Acceptdetails
و Display
که عمومی هستند، قابل دسترسی میباشند.
مشخصکننده Internal
مشخصکننده internal
اجازه میدهد که اعضای کلاس از داخل همان اسمبلی قابل دسترسی باشند. این مشخصکننده بیشتر برای کاربردهای داخلی اسمبلیها مفید است.
مثال:
using System;
namespace RectangleApplication {
class Rectangle {
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());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
}
}
}
در این مثال، متغیرهای length
و width
به صورت داخلی تعریف شدهاند و فقط از داخل همان اسمبلی قابل دسترسی هستند.
مشخصکننده Protected Internal
مشخصکننده protected internal
ترکیبی از protected
و internal
است که اجازه میدهد اعضای کلاس از داخل همان اسمبلی یا از کلاسهای مشتقشده دسترسی پیدا کنند. این مشخصکننده معمولاً در پیادهسازی وراثت استفاده میشود.
کپسولهسازی با استفاده از این مشخصکنندهها به شما اجازه میدهد تا سطح دسترسی به دادهها و متدها را کنترل کنید و به بهبود امنیت و سازماندهی کد کمک میکند.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام