The main purpose of using access specifiers is to provide security to the applications. The availability (scope) of the member objects of a class may be controlled using access specifiers.
A D V E R T I S E M E N T
PUBLIC: As the name specifies, it can be accessed from anywhere. If a member of a class is defined as public then it can be accessed anywhere in the class as well as outside the class. This means that objects can access and modify public fields, properties, methods.
PRIVATE: As the name suggests, it can't be accessed outside the class. Its the private property of the class and can be accessed only by the members of the class.
FRIEND/INTERNAL: Friend & Internal mean the same. Friend is used in VB.NET. Internal is used in C#. Friends can be accessed by all classes within an assembly but not from outside the assembly.
PROTECTED: Protected variables can be used within the class as well as the classes that inherites this class.
PROTECTED FRIEND/PROTECTED INTERNAL: The Protected Friend can be accessed by Members of the Assembly or the inheriting class, and ofcourse, within the class itself.
DEFAULT: A Default property is a single property of a class that can be set as the default. This allows developers that use your class to work more easily with your default property because they do not need to make a direct reference to the property. Default properties cannot be initialized as Shared/Static or Private and all must be accepted at least on argument or parameter. Default properties do not promote good code readability, so use this option sparingly.