Public: It specifies that it can be accessed by anyone.
Private: Private declared variables, classes or functions can be accessed only by the member functions. No one from outside the class can access them.
Protected: This access specifier is useful in a hierarchy wherein an access can be given only to the child classes.
Internal: These limit an access only within an assembly. Its is similar to a friend function of C++.
Protected Internal: These limit the access within the assembly and to the child classes in the hierarchy.