X hits on this document

803 views

0 shares

0 downloads

0 comments

137 / 396

C# LANGUAGE SPECIFICATION

If E is a predefined-type or a primary-expression classified as a type, and a member lookup (§‎7.3) of I in E produces a match, then E.I is evaluated and classified as follows:

If I identifies a type, then the result is that type.

If I identifies one or more methods, then the result is a method group with no associated instance expression.

If I identifies a static property, then the result is a property access with no associated instance expression.

If I identifies a static field:

If the field is readonly and the reference occurs outside the static constructor of the class or struct in which the field is declared, then the result is a value, namely the value of the static field I in E.

Otherwise, the result is a variable, namely the static field I in E.

If I identifies a static event:

If the reference occurs within the class or struct in which the event is declared, and the event was declared without event-accessor-declarations (§‎10.7), then E.I is processed exactly as if I was a static field.

Otherwise, the result is an event access with no associated instance expression.

If I identifies a constant, then the result is a value, namely the value of that constant.

If I identifies an enumeration member, then the result is a value, namely the value of that enumeration member.

Otherwise, E.I is an invalid member reference, and a compile-time error occurs.

If E is a property access, indexer access, variable, or value, the type of which is T, and a member lookup (§‎7.3) of I in T produces a match, then E.I is evaluated and classified as follows:

First, if E is a property or indexer access, then the value of the property or indexer access is obtained (§‎7.1.1) and E is reclassified as a value.

If I identifies one or more methods, then the result is a method group with an associated instance expression of E.

If I identifies an instance property, then the result is a property access with an associated instance expression of E.

If T is a class-type and I identifies an instance field of that class-type:

If the value of E is null, then a System.NullReferenceException is thrown.

Otherwise, if the field is readonly and the reference occurs outside an instance constructor of the class in which the field is declared, then the result is a value, namely the value of the field I in the object referenced by E.

Otherwise, the result is a variable, namely the field I in the object referenced by E.

If T is a struct-type and I identifies an instance field of that struct-type:

If E is a value, or if the field is readonly and the reference occurs outside an instance constructor of the struct in which the field is declared, then the result is a value, namely the value of the field I in the struct instance given by E.

Otherwise, the result is a variable, namely the field I in the struct instance given by E.

If I identifies an instance event:

If the reference occurs within the class or struct in which the event is declared, and the event was declared without event-accessor-declarations (§‎10.7), then E.I is processed exactly as if I was an instance field.

124Copyright Microsoft Corporation 1999-2003. All Rights Reserved.

Document info
Document views803
Page views803
Page last viewedSun Dec 04 02:27:29 UTC 2016
Pages396
Paragraphs9401
Words133190

Comments