ECMA-334 C# Language Specification10.8: Namespace and type names |
Several contexts in a C# program require a namespace-name
or a type-name
to be specified. Either form of name is written as one or more identifiers separated by "." tokens.
namespace-or-type-name
namespace-or-type-name
identifier
namespace-or-type-name
.
identifier
A type-name
is a namespace-or-type-name
that refers to a type. Following resolution as described below, the namespace-or-type-name
of a type-name
must refer to a type, or otherwise a compile-time error occurs.
A namespace-name
is a namespace-or-type-name
that refers to a namespace. Following resolution as described below, the namespace-or-type-name
of a namespace-name
must refer to a namespace, or otherwise a compile-time error occurs.
The meaning of a namespace-or-type-name
is determined as follows:
namespace-or-type-name
consists of a single identifier: namespace-or-type-name
appears within the body of a class or struct declaration, then starting with that class or struct declaration and continuing with each enclosing class or struct declaration (if any), if a member with the given name exists, is accessible, and denotes a type, then the namespace-or-type-name
refers to that member. Non-type members (constants, fields, methods, properties, indexers, operators, instance constructors, destructors, and static constructors) are ignored when determining the meaning of a namespace-or-type-name
. namespace-or-type-name
occurs, continuing with each enclosing namespace (if any), and ending with the global namespace, the following steps are evaluated until an entity is located: namespace-or-type-name
refers to that member and, depending on the member, is classified as a namespace or a type. namespace-or-type-name
occurs, then: using-alias-directive
that associates the given name with an imported namespace or type, then the namespace-or-type-name
refers to that namespace or type. using-namespace-directive
s of the namespace declaration contain exactly one type with the given name, then the namespace-or-type-name
refers to that type. using-namespace-directive
s of the namespace declaration contain more than one type with the given name, then the namespace-or-type-name
is ambiguous and an error occurs. namespace-or-type-name
is undefined and a compile-time error occurs. namespace-or-type-name
is of the form N.I, where N is a namespace-or-type-name
consisting of all identifiers but the rightmost one, and I is the rightmost identifier. N is first resolved as a namespace-or-type-name
. If the resolution of N is not successful, a compile-time error occurs. Otherwise, N.I is resolved as follows: namespace-or-type-name
, and a compile-time error occurs. In This Section: