A type-declaration is either a class-declaration (§10.1), a struct-declaration (§11.1), an interface-declaration (§13.1), an enum-declaration (§14.1), or a delegate-declaration (§15.1).
A type-declaration can occur as a top-level declaration in a compilation unit or as a member declaration within a namespace, class, or struct.
When a type declaration for a type T
occurs as a top-level declaration in a compilation unit, the fully qualified name of the newly declared type is simply T
. When a type declaration for a type T
occurs within a namespace, class, or struct, the fully qualified name of the newly declared type is N.T
, where N
is the fully qualified name of the containing namespace, class, or struct.
A type declared within a class or struct is called a nested type (§10.2.6).
The permitted access modifiers and the default access for a type declaration depend on the context in which the declaration takes place (§3.3.1):
public
or internal
access. The default is internal
access.public
, protected
internal
, protected
, internal
, or private
access. The default is private
access.public
, internal
, or private
access. The default is private
access.