سطح دسترسی
سطح دسترسی مشخص میکند که متدها یک کلاس یا اعضای دادهای در چه جای برنامه قابل دسترسی هستند. در این درس میخواهیم به سطح دسترسی private و public نگاهی بیندازیم. سطح دسترسی public زمانی مورد استفاده قرار میگیرد که شما بخواهید به یک متد یا فیلد در خارج از کلاس و حتی پروژه دسترسی یابید. به عنوان مثال به کد زیر توجه کنید :
1: using System; 2: 3: public class Test 4: { 5: public int number; 6: } 7: 8: public class Program 9: { 10: public static void Main() 11: { 12: Test x = new Test(); 13: 14: x.number = 10; 15: } 16: }
در این مثال کلاس Test را به صورت public تعریف کردهایم. این کار به کلاس program اجازه میدهد که از کلاس Test نمونه ایجاد کند. سپس یک عضو دادهای به صورت public در داخل کلاس Test تعریف میکنیم (خط 5). با تعریف این عضو به صورت public میتوانیم آن را در خارج از کلاس Test و در داخل متد Main() کلاس program مقدار دهی کنیم. اگر از کلمه کلیدی public استفاده نکنیم نمیتوانیم در داخل کلاس program نمونهای از کلاس Test ایجاد کنیم و به اعضای آن دسترسی یابیم و این به نوعی به معنی استفاده از سطح دسترسی private میباشد.
1: using System; 2: 3: private class Test 4: { 5: public int number; 6: } 7: 8: public class Program 9: { 10: public static void Main() 11: { 12: Test x = new Test(); 13: 14: x.number = 10; 15: } 16: }
همانطور که در مثال بالا مشاهده میکنید این بار از کلمه private در کلاس Test استفاده کردهایم (خط 3). وقتی که برنامه را کامپایل میکنیم با حطا مواجه میشویم چون کلاس Test در داخل کلاس program و یا هر کلاس دیگر قابل دسترسی نیست. به این نکته توجه کنید که با اینکه عضو دادهای کلاس Test به صورت public تعریف شده است باز هم نمیتوان به آن در داخل کلاس program دسترسی یافت چون کلاسی که در داخل آن قرار دارد از نوع private است در نتیجه تمام اعضای مربوطه در خارج از آن غیر قابل دسترسی هستند. نکته دیگر اینکه اگر شما برای یک کلاس سطح دسترسی تعریف نکنید آن کلاس دارای سطح دسترسی داخلی (internal) میشود به این معنی که فقط کلاسهای داخل پروژهای که با آن کار میکنید و میتوانند به آن کلاس دسترسی یابند. استفاده از سطح دسترسی internal معادل استفاده از سطح دسترسی public است با این تفاوت که در خارج از پروژه قابل دسترسی نیست. کدهای زیر دارای تأثیر یکسانی هستند.
class Test { }
internal class Test { }
اگر یک کلاس را به صورت public و اعضای آن را به صورت private تعریف کنیم، آنگاه میتوان یک نمونه از کلاس را در داخل کلاسهای دیگر ایجاد کرد ولی اعضای آن قابل دسترسی نیستند. اعضای دادهای private فقط به وسیله متد داخل کلاس Test قابل دسترسی هستند.
1: using System; 2: 3: public class Test 4: { 5: private int number; 6: } 7: 8: public class Program 9: { 10: public static void Main() 11: { 12: Test x = new Test(); 13: 14: x.number = 10; //Error, number is private 15: } 16: }
سطوح دسترسی دیگری هم در سی شارپ وجود دارد که بعد از مبحث وراثت در درسهای آینده در مورد آنها توضیح خواهیم داد.