This is preliminary documentation and subject to change.
To comment on this topic, please send us email at ngwssdk@microsoft.com. Thanks!
7.5.2 Simple names
An simple-name consists of a single identifier.
- simple-name:
- identifier
A simple-name is evaluated and classified as follows:
- If the simple-name appears within a block and if the block contains a local variable or parameter with the given name, then the simple-name refers to that local variable or parameter and is classified as a variable.
- Otherwise, for each type
T
, starting with the immediately enclosing class, struct, or enumeration declaration and continuing with each enclosing outer class or struct declaration (if any), if a member lookup of the simple-name in T
produces a match:
- If
T
is the immediately enclosing class or struct type and the lookup identifies one or more methods, the result is a method group with an associated instance expression of this
.
- If
T
is the immediately enclosing class or struct type, if the lookup identifies an instance member, and if the reference occurs within the block of a constructor, an instance method, or an instance accessor, the result is exactly the same as a member access (§7.5.4) of the form this.E
, where E
is the simple-name.
- Otherwise, the result is exactly the same as a member access (§7.5.4) of the form
T.E
, where E
is the simple-name. In this case, it is an error for the simple-name to refer to an instance member.
- Otherwise, starting with the namespace declaration in which the simple-name occurs (if any), continuing with each enclosing namespace declaration (if any), and ending with the global namespace, the following steps are evaluated until an entity is located:
- If the namespace contains a namespace member with the given name, then the simple-name refers to that member and, depending on the member, is classified as a namespace or a type.
- Otherwise, if the namespace declaration contains a using-alias-directive that associates the given name with an imported namespace or type, then the simple-name refers to that namespace or type.
- Otherwise, if the namespaces imported by the using-namespace-directives of the namespace declaration contain exactly one type with the given name, then the simple-name refers to that type.
- Otherwise, if the namespaces imported by the using-namespace-directives of the namespace declaration contain more than one type with the given name, then the simple-name is ambiguous and an error occurs.
- Otherwise, the name given by the simple-name is undefined and an error occurs.