در این مقاله، ما قصد داریم انواع access modifier ها و هدف آنها در #C را توضیح دهیم.
Access modifier ها، نوع قابلیت دسترسی به یک آبجکت و تمام عضوهای موجود در آن در پروژه #C را مشخص میکند. علاوه بر این، تمام نوع های داده ای #access modifier ،C های خودشان را دارند. حتی اگر access modifier آنها مشخص نشده باشد (access modifier پیشفرض بر روی آنها اعمال میشود).
اگرچه این مقاله بیشتر مرتبط به مفهوم شی گرایی است ولی ما در مورد آن میخواهیم همینجا صحبت کنیم. بنابراین درک مقاله بعدی در مورد متدها که به شدت به access modifier ها متکی است ، آسان تر می شود.
این مقاله، سرفصلی از دوره آموزشی زیر میباشد:
- راه اندازی محیط توسعه
- Data Type ها، Declaration ها و تعریف متغیرها در #C
- عملگرها در #c
- تبدیل نوع های داده ای
- ورودی و خروجی در #c
- کار با رشته ها
- شرطها در #c
- حلقه ها (While، Do-While، For)
- مدیریت خطاها
- Access Modifier ها
- متدها
- کلمات کلیدی Ref و Out
- بازگشت و متدهای بازگشتی
- آرایه ها (آرایه های تک بعدی و چند بعدی)
- کار با فایلها، StreamWriter و StreamReader
- کار با فایلها، File و Directory
اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک مبانی #c کلیک کنید.
انواع access modifier ها
#C چهار نوع access modifier را ارائه میدهد: private, public, protected, internal و دو access modifier ترکیبی: protected-internal و private-protected.
Private Access Modifier
آبجکتهایی که access modifier از نوع private را پیاده سازی میکنند فقط داخل یک class یا structure قابل دسترس هستند. به عبارتی دیگر، ما نمیتوانیم خارج از کلاسی که آنها پیاده سازی شده اند دسترسی داشته باشیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class NumberClass { private int number = 10; } class Program { static void Main(string[] args) { NumberClass num = new NumberClass(); Console.WriteLine(num.number); // Error. We can't access the number variable because // it has the private access modifier and its only accessible in the NumberClass class } } |
Public Access Modifier
آبجکتهایی که access modifier های از نوع public را پیاده سازی میکنند از هرجایی در پروژه قابل دسترس هستند. از این رو، محدودیتهای دسترسی وجود ندارد:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class NumberClass { public int number = 10; } class Program { static void Main(string[] args) { NumberClass num = new NumberClass(); Console.WriteLine(num.number); // This is OK. The number variable has the public access modifier. } } |
Protected Access Modifier
کلمه protected دلالت بر این دارد که object مورد نظر داخل همان class و تمام class هایی که از آن class مشتق میشوند قابل دسترس هستند. ما در ماژول 2 در مورد وراثت در برنامه نویسی شی گرایی بیشتر صحبت میکنیم. اما در حال حاضر، ما میخواهیم نگاهی به این مثال بندازیم تا نحوه رفتار اعضای protected را درک کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class NumberClass { protected int number = 10; //we can access this variable inside this class } class DerivedClass: NumberClass //this is inheritance. DerivedClass derives from the NumberClass class { void Print() { Console.WriteLine(number); //we can access it in this class as well because it derives from the NumberClass class } } class Program { void Print() { NumberClass num = new NumberClass(); Console.WriteLine(num.number); // Error. The number variable is inaccessible due to its protection level. // The Program class doesn't derive from the NumberClass } } |
Internal Access Modifier
کلمه internal تعیین میکند که object مورد نظر فقط داخل اسمبلی خودش مورد دسترسی قرار میگیرد نه در اسمبلی های دیگر:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//First Project (ASSEMBLY) public class NumberClassInFirstProject { internal int number = 10; //we can access this variable inside this class } class ProgramInFirstProject { void Print() { NumberClassInFirstProject num = new NumberClassInFirstProject(); Console.WriteLine(num.number); // This is OK. Anywhere in this project (assembly) // we can access the number variable. } } //Second project (ASSEMBLY) class Program { void Print() { NumberClassInFirstProject num = new NumberClassInFirstProject(); Console.WriteLine(num.number); // Error. The number variable is inaccessible due to its protection level. //The Program class in second project can't access the internal members from another project } } |
Protected Internal Access Modifier
protected internal access modifier ترکیبی از protected و internal است. به عبارتی دیگر، ما به عضو protected internal مورد نظر فقط در همان اسمبلی یا در یک کلاس مشتق شده در اسمبلی های دیگر(پروژه ها) میتوانیم دسترسی داشته باشیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//First Project (ASSEMBLY) public class NumberClassInFirstProject { protected internal int number = 10; //we can access this variable inside this class } class ProgramInFirstProject { void Print() { NumberClassInFirstProject num = new NumberClassInFirstProject(); Console.WriteLine(num.number); // This is OK. Anywhere in this project (assembly) we can access the number variable. } } //Second project (ASSEMBLY) class Program: NumberClassInFirstProject //Inheritance { void Print() { Console.WriteLine(number); //This is OK as well. The class Program derives from the NumberClassInFirstProject clas. } } |
Private Protected Access Modifier
private protected access modifier یک ترکیبی از کلمات private and protected است. ما می توانیم به اعضا در درون همان کلاس یا در کلاسی که از آن کلاس مشتق شده است اما فقط درون همان اسمبلی (پروژه) دسترسی داشته باشیم. بنابراین، اگر بخواهیم از اسمبلی دیگری به آن دسترسی داشته باشیم، با خطا مواجه خواهیم شد.
نتیجه گیری
بنابراین، این تمام چیزی بود که در مورد access modifier ها وجود داشت. به عبارتی دیگر، ما انواع access modifier ها را که میتوانیم در #C استفاده کنیم و محدودیتهای مربوط به هریک از آنها را یاد گرفتیم .
مقاله بعدی در مورد متدها در #C است.