Public
The entire program is accessible. This implies that another method or another assembly that contains the class reference, can access these members or types. Access to the public members is not restricted.
Private
To hide member variables and functions, use the Private Access Specifier. Access is limited and only usable within the current assembly.
Protected
This type of access has a limited scope and is accessible within the class. In case of inheritance, it is also accessible within sub class or child class.
Internal
Any class or type that is declared as internal is accessible anywhere within the same namespace because access is limited to the current assembly alone. In C#, Internal is the default if no access modifier is specified.
Protected Internal
The current assembly and types derived from the containing class have access. Variables are accessible to all members of the current project and derived class.
Private Protected
Access is limited to the current assembly's containing class or types derived from the containing class. This modifier is valid in C# version 7.2 and later.