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