13.07.2015 Views

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

C# Language Specification - Willy .Net

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>C#</strong> LANGUAGE SPECIFICATIONobject o = new int[3][1];which would otherwise be interpreted asobject o = (new int[3])[1];14.5.1 LiteralsA primary-expression that consists of a literal (§9.4.4) is classified as a value.14.5.2 Simple namesA simple-name consists of a single identifier.simple-name:identifierA simple-name is evaluated and classified as follows:• If the simple-name appears within a block and if the block’s (or an enclosing block’s) local variabledeclaration space (§10.3) contains a local variable or parameter with the given name, then the simplenamerefers 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 enumerationdeclaration and continuing with each enclosing outer class or struct declaration (if any), if a memberlookup 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, theresult 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 thereference occurs within the block of an instance constructor, an instance method, or an instance accessor, theresult is the same as a member access (§14.5.4) of the form this.E, where E is the simple-name.Otherwise, the result is the same as a member access (§14.5.4) of the form T.E, where E is the simple-name.In this case, it is a compile-time error for the simple-name to refer to an instance member.• Otherwise, starting with the namespace in which the simple-name occurs, continuing with eachenclosing namespace (if any), and ending with the global namespace, the following steps are evaluateduntil an entity is located:If the namespace contains a namespace member with the given name, then the simple-name refers to thatmember and, depending on the member, is classified as a namespace or a type.Otherwise, if the namespace has a corresponding namespace declaration enclosing the location where thesimple-name occurs, then:• If the namespace declaration contains a using-alias-directive that associates the given name withan 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 namespacedeclaration contain exactly one type with the given name, then the simple-name refers to thattype.• Otherwise, if the namespaces imported by the using-namespace-directives of the namespacedeclaration contain more than one type with the given name, then the simple-name is ambiguousand a compile-time error occurs.• Otherwise, the name given by the simple-name is undefined and a compile-time error occurs.14.5.2.1 Invariant meaning in blocksFor each occurrence of a given identifier as a simple-name in an expression or declarator, every otheroccurrence of the same identifier as a simple-name in an expression or declarator within the immediately138

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!