Public – Class or member can be accessed by any code.
Private – Class or member can only be accessed by parent class.
Protected – Class or member can only be accessed by parent class or derived class.
Internal – Class or member can only be accessed by code inside the same assembly.
Classes are internal by default.
Methods and properties are private by default.
Encapsulation – hiding implemantation behind public interfaces, reducing coupling increases plug-ability / reusability, maintainability etc.
private fields have two purposes:
1 – reference to object or variable that used for internal implementation of class
2 – hold the state of an object , backing field for public property.
The shortcut in Visual Studio:
propful [tab] [tab]
private int myField; property int MyProperty{ get{return myField;} set{ if(value > 100) myField = value; else //tell the caller that they can not do this } }
Full property definition and private fields to control access to private fields / state of an object.
propg [tab] [tab]
public int MyProperty{ get; private set;}
Restricts setting of property to just the class internal implementation
More on this topic could be found on microsoft.com