Public : در هرجایی از کلاس
Private : فقط داخل کلاس
Protected : تنها در آن کلاس و زیرکلاس هایش
Internal : داخل assemly کلاس
Protected Intenal : داخل آن کلاس، زیرکلاس هایش و assembly
Access Modifiers سطح مشخصی از مجوز برای دسترسی به خصوصیات و متدها می باشد. با اعلام تغییر دسترسی یک متغیر تعریف می کنیم یا حتی می توانیم از assembly به داخل کلاس دسترسی داشت.
Public
با استفاده از public یک رویداد یا متغیر می تواند از خارج از کلاس قابل دستیابی باشد. جایی که متعلق به آن است. و همینطور خارج از assembly
class ClassTest
{
//Public method
public void MethodPublic()
{
// defination of MethodPublic
}
}
// to access the method
class Program
{
static void Main(string[] args)
{
ClassTest objClassTest = new ClassTest();
objClassTest.MethodPublic(); // valid code to access.
}
}
Private
استفاده از متدها و متغیرها را تنها در کلاس خودش محدود می کند و خارج از کلاس نمی تواند استفاده شود. همانطور که یک سازنده private از یک کلاس را اعلان می کنید. که نمی تواند خارج از کلاس قابل استفاده باشد. و نمی توان از آن کلاس یک شی ایجاد کنید.
مثالی از کلیدواژه Private
class ClassTest
{
//Private method
private void MethodPrivate()
{
// defination of MethodPrivate
}
}
// to access the method
class Program
{
static void Main(string[] args)
{
ClassTest objClassTest = new ClassTest();
objClassTest.MethodPrivate(); // invalid code to access.
}
}
مثالی از private Constructor
class ClassTest
{
private ClassTest() { } // private constructor
}
// to access the method
class Program
{
static void Main(string[] args)
{
// invalid code. can't create an object of this class
ClassTest objClassTest = new ClassTest();
}
}
Protected
protected اجازه دسترسی متغیرها و متدها از کلاس و زیرکلاس را می دهد. بدین معنا که متدها می توانند از داخل کلاس و کلاسی که از آن ارث بری کرده است قابل دسترسی باشند.
class ClassTest
{
//Protected variable
protected int _a;
}
class ClassTest2 : ClassTest
{
ClassTest2()
{
this._a = 10; // can access from this class
}
}
class ClassTest3
{
ClassTest3()
{
this._a = 10; // can't access from this class
}
}
Internal
internal در #C معرفی شده است. در جاوا ما این سطح دسترسی را نداریم. این دستیابی بعد از Protected می باشد. protected اجازه دستیابی از کلاس و زیرکلاس را می دهد. assembly را به آن اضافه می کند. بدین معنا که متغیرها ومتدها می توانند درون assemly جایی که کلاس به آن تعلق دارد قابل دسترسی باشند. assembly و NameSpace اندکی متفاوت می باشند. یک assembly می تواند بیش از یک namespace را نگهداری کند. assemblyها در واقع Dllهای یک پروژه می باشند.
class ClassTest
{
internal void MethodInternal()
{
// do your code
}
}
// to access the method
class Program
{
static void Main(string[] args)
{
ClassTest objClassTest = new ClassTest();
objClassTest.MethodInternal(); // valid code to access.
}
}
Protected Internal
اجازه دسترسی از کلاس و زیرکلاس را می دهد. هچنین اجازه دسترسی از همان assembly را می دهد. بدین معنا که در protected اگر کلاس ارث بری کرده باشد، super class و متد یا متغیر protected می باشند، سپس دسترسی assembly مهم نیست. اما در Internal اگر کلاس ارث بری کرده باشد assembly مهم می باشد. در زیر می بینید که چرا از Protected Internal استفاده می کنیم.
class ClassTest
{
protected internal string name; // protected internal
public void print()
{
Console.WriteLine("\nMy name is " + name);
}
}
// to access the method
class Program
{
static void Main(string[] args)
{
ClassTest objClassTest = new ClassTest();
// Accepting value in protected internal variable
objClassTest.name = "Arka";
objClassTest.print();
}
}