Tuesday, October 4, 2011

Access Modifiers in C#

There are 5 types of access modifiers in c#
Public
public members can be accessed by any other code in the same assembly or any other assembly that references it.
private
private members can only be accessed by code in the same class or structure.
Protected
protected members can only be accessed by code in the same class or structure,
or in a derived class.(Classes that do not derived from the protected members class can't use these protected members)
Internal
Internal members can be accessed by any code in the same assembly, but not from another assembly.
Protected Internal
Protected Internal members can be accessed by any code in the same assembly, or by any derived class in another assembly. protected internal members are either protected or internal but not both. Inside the same assembly it behaves as internal, in other assemblies it behaves as protected members.



















































same assembly - same class

same assembly -derived class

same assembly - Object reference

diff assembly - Object reference

diff assembly - derived class

public

TRUE

TRUE

TRUE

TRUE

TRUE

private

TRUE

FALSE

FALSE

FALSE

FALSE

protected

TRUE

TRUE

FALSE

FALSE

TRUE

Internal

TRUE

TRUE

TRUE

FALSE

FALSE

protected internal

TRUE

TRUE

TRUE

FALSE

TRUE


Example:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectOne
{
/* same assembly - same class */
public class AccessModifiers
{
public int publicVariable = 10;
private int privateVariable = 20;
protected int protectedVariable = 30;
internal int internalVariable = 40;
protected internal int protectedInternalVariable = 50;

public void accessModifiersDisplay()
{
Console.WriteLine("{0}", publicVariable);
Console.WriteLine("{0}", privateVariable);
Console.WriteLine("{0}", protectedVariable);
Console.WriteLine("{0}", internalVariable);
Console.WriteLine("{0}", protectedInternalVariable);
Console.Read();
}
}

/* same assembly - derived class */
class DerivedFromAccessModifiers : AccessModifiers
{
public void derivedFromAccessModifiersDisplay()
{
Console.WriteLine("{0}", publicVariable);
// Console.WriteLine("{0}", privateVariable); /* Not Accessable */
Console.WriteLine("{0}", protectedVariable);
Console.WriteLine("{0}", internalVariable);
Console.WriteLine("{0}", protectedInternalVariable);
}
}

/* same assembly - Object reference */
class Program
{
static void Main(string[] args)
{
AccessModifiers AM = new AccessModifiers();

Console.WriteLine("{0}", AM.publicVariable);
// Console.WriteLine("{0}", AM.privateVariable); /* Not Accessable */
// Console.WriteLine("{0}", AM.protectedVariable); /* Not Accessable */
Console.WriteLine("{0}", AM.internalVariable);
Console.WriteLine("{0}", AM.protectedInternalVariable);

AM.accessModifiersDisplay();
}
}
}

/* Different Assembly */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjectOne;

namespace ProjectTwo
{
/* different assembly - Object reference */
class AccessModifiers_2
{
AccessModifiers AM = new AccessModifiers();
public void accessModifiersDisplay_2()
{
Console.WriteLine("{0}", AM.publicVariable);
// Console.WriteLine("{0}", AM.privateVariable); /* Not Accessable */
// Console.WriteLine("{0}", AM.protectedVariable); /* Not Accessable */
// Console.WriteLine("{0}", AM.internalVariable); /* Not Accessable */
// Console.WriteLine("{0}", AM.protectedInternalVariable); /* Not Accessable */
}
}

/* different assembly - derived class */
class DerivedFromAccessModifiers_2 : AccessModifiers
{
public void derivedFromAccessModifiersDisplay()
{
Console.WriteLine("{0}", publicVariable);
// Console.WriteLine("{0}", privateVariable); /* Not Accessable */
Console.WriteLine("{0}", protectedVariable);
// Console.WriteLine("{0}", internalVariable); /* Not Accessable */
Console.WriteLine("{0}", protectedInternalVariable);
}
}
}

No comments:

Post a Comment