A member-access consists of a primary-expression or a predefined-type, followed by a ".
" token, followed by an identifier.
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:
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.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:
I
identifies a type, then the result is that type.I
identifies one or more methods, then the result is a method group with no associated instance expression.I
identifies a static
property, then the result is a property access with no associated instance expression.I
identifies a static
field:
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
.I
in E
.I
identifies a static
event:
E.I
is processed exactly as if I
was a static field or property.I
identifies a constant, then the result is a value, namely the value of that constant.I
identifies an enumeration member, then the result is a value, namely the value of that enumeration member.E.I
is an invalid member reference, and an error occurs.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:
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.I
identifies one or more methods, then the result is a method group with an associated instance expression of E
.I
identifies an instance property, then the result is a property access with an associated instance expression of E
.T
is a class-type and I
identifies an instance field of that class-type:
E
is null
, then a NullReferenceException
is thrown.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
.I
in the object referenced by E
.T
is a struct-type and I
identifies an instance field of that struct-type:
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
.I
in the struct instance given by E
.I
identifies an instance event:
E.I
is processed exactly as if I
was an instance field or property.E
.E.I
is an invalid member reference, and an error occurs.