C#: access modifiers

Members default to private when no access modifier is present.

public: accessible from an object variable as well as derived classes
private: accessible only from the class that has defined the method. In C#, all members are private by default
protected: accessible by the defining class and derived classes. Protected methods are not accessible from an object variable.
internal: accessible by any type in the assembly, but not outside the assembly
protected internal: access is limited to the current assembly or types derived from the defining class in the current assembly

internal or internal protected members are really only useful when creating code libraries.

Types (classes, interfaces, structures, enumerations, delegates) are limited to public or internal; private may be used when the type is nested. internal is the default accessibility for types in C#.