Type declarations

A type-declaration is a class-declaration (17.1), a struct-declaration (18.1), an interface-declaration (20.1), an enum-declaration (21.1), or a delegate-declaration (22.1). type-declaration : class-declarationstruct-declarationinterface-declarationenum-declarationdelegate-declaration
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 (17.2.6).
The permitted access modifiers and the default access for a type declaration depend on the context in which the declaration takes place (10.5.1): Types declared in compilation units or namespaces can have public or internal access. The default is internal access. Types declared in classes can have public, protected internal, protected, internal, or private access. The default is private access. Types declared in structs can have public, internal, or private access. The default is private access.