.Net
has five access Specifiers:-
Defines the accessibility of the types.
Public
Protected
Private
Internal
protected
internal
Public -- Accessible
outside the class through object reference.
Private -- Accessible inside
the class only through member functions.
Protected -- Just like private
but Accessible in derived classes also through member
functions.
Internal
--
Visible inside the assembly. Accessible through objects.
Protected
Internal
-- Visible inside the assembly through objects and in derived classes outside
the assembly through member functions.
Example:-
public class
Class1
{
int
i;
//No Access specifier means private
public int
j;
// Public
protected int
k;
//Protected data
internal int
m;
// Internal means visible inside assembly
protected internal int
n;
//inside
assembly as well as to derived classes outside assembly
static int
x;
// This is
also private
public static int
y;
//Static means shared across
objects
[DllImport("MyDll.dll")]
public static extern int
MyFoo(); //extern
means declared in this assembly defined in some other assembly
public void myFoo2()
{
//Within a class if you create an object of same
class then you can access all data members through object reference even
private data too
Class1 obj = new
Class1();
obj.i =10; //Error can’t access private
data through object.But here it is accessible.:)
obj.j =10;
obj.k=10;
obj.m=10;
obj.n=10;
//
obj.s =10; //Errror Static data can be accessed by class names only
Class1.x = 10;
// obj.y = 10; //Errror Static data can be
accessed by class names only
Class1.y = 10;
}
}
Now lets try to copy the same
code inside Main method and try to compile
[STAThread]
static void Main()
{
//Access specifiers comes into picture only when you create
object of class outside the class
Class1 obj = new Class1();
//
obj.i =10; //Error can’t access private data through object.
obj.j =10;
//
obj.k=10; //Error can’t access protected data through
object.
obj.m=10;
obj.n=10;
//
obj.s =10; //Errror Static data can be accessed by class names only
Class1.x = 10; //Error can’t access private
data outside class
// obj.y = 10; //Errror Static data can be accessed
by class names only
Class1.y = 10;
}
What if Main is inside another assembly
[STAThread]
static void Main()
{
//Access specifiers comes into picture only when you create
object of class outside the class
Class1 obj = new Class1();
//
obj.i =10; //Error can’t access private data through object.
obj.j =10;
//
obj.k=10; //Error can’t access protected data through
object.
//
obj.m=10; // Error can’t access internal data outside assembly
//
obj.n=10; // Error can’t access internal data outside assembly
//
obj.s =10; //Errror Static data can be accessed by class names only
Class1.x = 10; //Error can’t access private
data outside class
// obj.y = 10; //Errror Static data can be
accessed by class names only
Class1.y = 10;
}