Table of Contents 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Notes DownloadECMA-334 C# Language Specification


14 Expressions
14.5 Primary expressions
14.5.4 Member access
Paragraph 11 A member-access consists of a primary-expression or a predefined-type, followed by a "." token, followed by an identifier. member-access : primary-expression . identifier predefined-type . identifier predefined-type : one of bool byte char decimal double float int long object sbyte short string uint ulong ushort
Paragraph 21 A member-access of the form E.I, where E is a primary-expression or a predefined-type and I is an identifier, is evaluated and classified as follows: - 2 If E is a namespace and I is the name of an accessible member of that namespace, then the result is that member and, depending on the member, is classified as a namespace or a type.
- 3 If E is a predefined-type or a primary-expression classified as a type, and a member lookup (§14.3) of I in E produces a match, then E.I is evaluated and classified as follows:
- 4 If I identifies a type, then the result is that type.
- 5 If I identifies one or more methods, then the result is a method group with no associated instance expression.
- 6 If I identifies a static property, then the result is a property access with no associated instance expression.
- 7 If I identifies a static field:
- 8 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.
- 9 Otherwise, the result is a variable, namely the static field I in E.
- 10 If I identifies a static event:
- 11 If the reference occurs within the class or struct in which the event is declared, and the event was declared without event-accessor-declarations (§17.7), then E.I is processed exactly as if I was a static field.
- 12 Otherwise, the result is an event access with no associated instance expression.
- 13 If I identifies a constant, then the result is a value, namely the value of that constant.
- 14 If I identifies an enumeration member, then the result is a value, namely the value of that enumeration member.
- 15 Otherwise, E.I is an invalid member reference, and a compile-time error occurs.
- 16 If E is a property access, indexer access, variable, or value, the type of which is T, and a member lookup (§14.3) of I in T produces a match, then E.I is evaluated and classified as follows:
- 17 First, if E is a property or indexer access, then the value of the property or indexer access is obtained (§14.1.1) and E is reclassified as a value.
- 18 If I identifies one or more methods, then the result is a method group with an associated instance expression of E.
- 19 If I identifies an instance property, then the result is a property access with an associated instance expression of E.
- 20 If T is a class-type and I identifies an instance field of that class-type:
- 21 If the value of E is null, then a System.NullReferenceException is thrown.
- 22 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.
- 23 Otherwise, the result is a variable, namely the field I in the object referenced by E.
- 24 If T is a struct-type and I identifies an instance field of that struct-type:
- 25 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.
- 26 Otherwise, the result is a variable, namely the field I in the struct instance given by E.
- 27 If I identifies an instance event:
- 28 If the reference occurs within the class or struct in which the event is declared, and the event was declared without event-accessor-declarations (§17.7), then E.I is processed exactly as if I was an instance field.
- 29 Otherwise, the result is an event access with an associated instance expression of E.
- 30 Otherwise, E.I is an invalid member reference, and a compile-time error occurs.
|
Jagger Software Ltd |
Company # 4070126 |
VAT # 762 5213 42 |

