When access is allowed to a member, it said to be accessible. Otherwise, it is inaccessible. Use the access modifiers, public, protected, internal, or private, to specify one of the following declared accessibilities for members.
Declared accessibility | Meaning |
---|---|
public | Access is not restricted. |
protected | Access is limited to the containing class or types derived from the containing class. |
internal | Access is limited to the current project. |
protected internal | Access is limited to the current project or types derived from the containing class. |
private | Access is limited to the containing type. |
Only one access modifier is allowed for a member or type, except for the protected internal combination.
Access modifiers are not allowed on namespaces. Namespaces have no access restrictions.
Depending on the context in which a member declaration takes place, only certain declared accessibilities are permitted. If no access modifier is specified in a member declaration, a default accessibility is used.
Top-level types, which not nested into other types, can only have internal or public accessibility. The default accessibility for these types is internal.
Nested types, which are members of other types, can have declared accessibilities as indicated in the following table.
Members of | Default member accessibility | Allowed declared accessibility of the member |
---|---|---|
enum | public | None |
class | private | public
protected internal private protected internal |
interface | public | None |
struct | private | public
internal private |
The accessibility of a nested type depends on its accessibility domain, which is determined by both the declared accessibility of the member and the accessibility domain of the immediately containing type. However, the accessibility domain of a nested type cannot exceed that of the containing type.
Access Modifiers | Accessibility Domain | Restrictions on Using Accessibility Levels