مطالعهی چند پست گذشته به شما کمک میکند تا مقدمات زبان برنامهنویسی C# را فراگرفته و در نهایت کدنویسی خود را آغاز کنید. حال در این پست قصد داریم یک مقدار مباحث آموزشی را تخصصی تر کرده تا قبل از ورود به دنیای بسیار پر رمز و راز برنامهنویسی دقت عمل بالایی را کسب کنید تا بتوانید کدهای بهینه و در عین حال قابل دسترس را در اختیار داشته باشید. مفهومی که در این پست در مورد آن صحبت میکنیم پیرامون مبحث کپسوله سازی یا Encapsulation و تعیین سطح دسترسی یا Access Modifier ها در زبان برنامهنویسی C# است.
کپسولهسازی یا Encapsulation در برنامهنویسی کامپیوتر مفهومی است که عموما در کلاسها و به عنوان یکی از مبانی و اصول برنامهنویسی شیءگرایی (OOP که مخفف عبارت Object Oriented Programming است) میباشد.
قبل از مفهوم کپسوله سازی با معنیای به نام انتزاع یا Abstraction آشنا میشویم.
قبل از ورود به مبحث کپسوله سازی باید خدمت شما عزیزان مطرح کنم که در پست های بعدی با مفاهیم کلاسها و اشیاء به تفصیل آشنا خواهید شد و هدف از این پست اشنا شدن شما عزیزان با مفاهیمی چون کپسوله سازی و Access Modifier ها است. بنابراین اگر کدی برای شما ناملموس است اصلا نگران نباشید زیرا در پست های بعدی به صورت کامل پوشش لازم را خواهیم داشت.
برای اجرای کپسوله سازی یا Encapsulation از تغییردهندههای دسترسی یا (Access Modifier) استفاده میکنیم. این تغییردهندهها معمولا روی اعضای یک کلاس تاثیر میگذارند. زبان برنامهنویسی C# از چندین تغییردهنده دسترسی پشتیبانی میکند که به شرح ذیل میباشد:
- دسترسی Public (عمومی)
- دسترسی Private (خصوصی)
- دسترسی Protected (محافظتشده)
- دسترسی Internal (داخلی)
- دسترسی Protected Internal (محافظت شدهی داخلی)
سطح دسترسی عمومی (Public Access Modifier)
این سطح دسترسی زمانیکه روی یک کلاس اعمال میشود، اعضاء و توابع متغییر آن را در اختیار سایر توابع و اشیاء میگذارد. هر عضو عمومی (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) تعریف شدهاند و این بدین معنیست که آنها در تابع دیگری تحت عنوان ()Main با استفاده از نمونهای از کلاس Rectangle در دسترس میباشند.
در کلاس Rectangle نیز توابعی تحت عنوان Display و GetArea وجود دارند که به صورت مستقیم در تابع دیگری مانند ()Main استفاده شده اند چون دسترسی آنها نیز Public میباشد.
سطح دسترسی اختصاصی (Private Access Modifier)
این نوع دسترسی که دسترسی اختصاصی و شخصی معروف است زمانیکه روی یک کلاس لحاظ شود باعث میشود اعضا و توابع تنها درون آن کلاس در قابل استفاده باشند و از سایر کلاسها مخفی بماند و قابل دسترسی نباشد. این نوع سطح دسترسی بیشترین میزان محدودیت را دارد.
توجه: در حالت پیشفرض کلاسها با سطح دسترسی 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();
}
}
}
همانطور که در مثال فوق ملاحظه میکنید تنها متدهایی که با فرمت Public ایجاد شدهاند، خارج از آن کلاس در دسترس میباشند. بنابراین خروجی این مثال به صورت زیر میباشد:
Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52
سطح دسترسی محافظت شده (Protected Access Modifier)
تمام اعضا و متدهای کلاسی که با سطح دسترسی Protected ایجاد شدهاند تنها درون آن کلاس و سایر کلاسهایی که از این کلاس به ارث رفتهاند، قابل دسترس هستند. ( در ارتباط با ارث بری در فصول آینده توضیحاتی را ارائه خواهیم کرد)
سطح دسترسی داخلی (Internal Access Modifier)
این نوع سطح دسترسی اگر روی اعضا و متدهای یک کلاس لحاظ شود باعث میشود که آنها تنها درون پروژه جاری در دسترس باشند. به مثال زیر توجه کنید:
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)
این حالت دقیقا مشابه حالت internal می باشد با این تفاوت که متدها و اعضای موجود در کلاسهایی که از این کلاس به ارث رفتهاند حتی اگر در پروژه دیگری باشند، قابلیت دسترسی دارند.
بسیار عالی! در این بخش به توضیح کامل تعیین سطح دسترسی در زبان برنامهنویسی C# پرداختیم. در پست های آینده به معرفی کلاسها و در نهایت اشیاء و متدها می پردازیم. با ما همراه باشید 🙂
با تشکر از شما، دوستان میتوانید با عضویت در کانال تلگرامی ما جدیدترین مطالب و اخبار رو دریافت کنید .
آدرس کانال :
bytelearn@
مطالب مرتبط با این پست :
دستورهای شرطی، کنترلی و حلقهها در سی شارپ
بررسی قابلیت های جدید سی شارپ 8
آنچه که باید درباره زبان برنامه نویسی سی شارپ بدانید
برنامه نویسی Net. چیست و چه کاربردی دارد؟