کنترل سطوح دسترسی (Acees Modifiers ) در سی شارپ

اصولا کاربرد Access Modifier‌ها بر روی دو حوزه می‌باشد.

1. در تعریف کلاس یا Enum یا Structure ها.
2. در تعریف متغییر‌ها , Method‌ها , Constructor‌ها و ...

کلا ما ۵ سطح دسترسی داریم:
۱. public
2. protected
3. internal
4. protected internal یا internal protected
5. private

public access modifier: به این معنی که هیچ گونه محدودیتی قائل نیستیم. امکان استفاده از آن برای کلاس‌ها (آیتم‌های اول) و متغییر‌ها و ... (آیتم‌های دوم) وجود دارد. وقتی من کلاس public تعریف می‌کنم به این معناست که هر کسی (چه داخل پروژه من و چه خارج از پروژه من) امکان استفاده از کلاس من را دارد.
وقتی متغییر یا متدی به صورت public تعریف می‌شود هر کسی که به کلاس دسترسی دارد می‌تواند از متغییر یا متد شما استفاده کند.

! دقت داشته باشین که شما اجازه ندارین به متغییر‌ها و ... درون کلاس دسترسی بالاتر از خود کلاس بدهید.

protected access modifier:
وقتی یک متغییر یا متد یا ... به صورت protected تعریف می‌شوند. داخل کلاس یا ... که تعریف شده و کلاس هایی که از آن کلاس به ارث رفته اند قابل دسترسی می‌باشد.
به عنوان مثال کلاس Person دارای یک متد به نام GetInfo() است که به صورت زیر تعریف شده است:

public class Person
{
public int Age;
public string Name;

protected void GetInfo()
{
Console.WriteLine("Name:");
this.Name = Console.ReadLine();
Console.WriteLine("Age:");
this.Age = int.Parse(Console.ReadLine());
}
}

حالا کلاس Emp که از کلاس Person به ارث رفته است می‌خواهد از متد GetInfo() استفاده کند و چون متد GetInfo() به صورت protected تعریف شده و در نتیجه تمامی کلاس هایی که از Person به ارث بروند امکان استفاده از GetInfo() را دارند, قادر به انجام این کار است.
در صورتیکه از هیچ کجای دیگر امکان استفاده از این متد برای کلاس‌های دیگر مثل کلاس Programm وجود ندارد!
 

متد protected دیده نمی‌شود!


! دقت داشته باشین که protected برای گروه آیتم‌های اول (کلاس‌ها و...) قابل استفاده نیست.

internal access modifier:خیلی از مواقع پیش می‌آید که شما کلاسی را ایجاد می‌کنین که احتمال دارد در پروژه‌های دیگری بیرون از این پروژه جاری استفاده شود. (مثلا در مورد برنامه نویسی چندلایه که امیدوارم در آینده در موردش بیشتر توضیح بدهیم). حالا فرض فرمائین که شما نمی‌خواهین یک کلاس یا متغییر یا ... آن کلاس در اختیار کسانی قرار بگیرد که بیرون از پروژه جاری شما از این Assembly استفاده می‌کنند. (مثلا شما یک Component رو در نظر بگیرین که قرار است داخل n تا پروژه دیگر استفاده شود). برای همین می‌توانید با استفاده از internal فقط به کلاس هایی که داخل این پروژه شما هستند اجازه دهین که از این کلاس یا متغییر یا ... استفاده کنند.

internal protected access modifier: دسترسی فوق تلفیقی است از internal و protected به این معنا که اگر متغییری به صورت internal protected تعریف شده باشد. کلاس هایی که داخل این پروژه هستند و یا از کلاسی که این متغییر داخلش قرار دارد به ارث رفته باشند , اجازه دارند که از این متغییر استفاده نمایند.

! دقت داشته باشین که protected internal هم برای گروه آیتم‌های اول (کلاس‌ها و...) قابل استفاده نیست.

private access modfier: متغییر و یا متد و ... که به صورت private تعریف شود , فقط و فقط داخل همان کلاس قابل استفاده خواهد بود.

! دقت داشته باشین که private برای گروه آیتم‌های اول (کلاس‌ها و...) قابل استفاده نیست.

 

منبع : http://csharptuning.blogfa.com


ارسال نظر

Captcha image

نظرات

مطالب مرتبط