Выражение доступа к члену определяется следующим образом.
member-access:
primary-expression . identifier
predefined-type . identifier
predefined-type: one of
Boolean Byte Char Decimal Double Float
Integer Long Object SByte Short String
UInteger ULong UShort
Выражение доступа к члену в форме E.I, где E - это первичное выражение или стандартный тип, а I - это идентификатор вычисляется и классифицируется следующим образом:
Если E - это пространство имен и I - это доступный его член, то результатом выражения является этот член и выражение классифицируется как пространство имен или тип (в зависимости от члена).
Если Е – это стандартный тип или первичное выражение, классифицированное как тип, и поиск члена I в типе E обнаруживает соответствие, то E.I вычисляется и классифицируется следующим образом:
Если I идентифицирует один или более методов, то результатом выражения является данная группа методов без ассоциированного с ними экземплярного выражения.
Если I идентифицирует статическое свойство, то результатом выражения является доступ к свойству без ассоциированного с ними экземплярного выражения.
Если I идентифицирует статическое поле:
Если поле является доступным только для чтения и обращение производится вне статического конструктора класса или структуры в котором это поле объявлено, то результатом выражения является значение, а именно значение статического поля I в E.
В противном случае результатом выражения является переменная, а именно статическое поле I в E.
Если I идентифицирует статическое событие:
Если обращение к событию производится внутри класса или структуры в котором это событие объявлено, то выражение E.I обрабатывается в точности также, как если бы оно было статическим полем.
В противном случае результатом выражения является доступ к событию без ассоциированного с ними экземплярного выражения.
Если I идентифицирует константу, то результатом выражения является значение, а именно значение этой константы.
Если I идентифицирует член перечисления, то результатом выражения является значение, а именно значение этого члена перечисления.
В противном случае E.I является недопустимой ссылкой на член и возникает ошибка компиляции.
Если E – это доступ к свойству, переменная или значение, тип которого T, и поиск члена I в типе E обнаруживает соответствие, то E.I вычисляется и классифицируется следующим образом:
В первую очередь если E является свойством, то получается значение этого свойства и E переклассифицируется как значение.
Если I идентифицирует один или более методов, то результатом выражения является данная группа методов с ассоциированным с ними экземплярным выражением E.
Если I идентифицирует экземплярное свойство, то результатом выражения является доступ к свойству с ассоциированным с ним экземплярным выражением E.
Если T является классом и I идентифицирует экземплярное свойство этого класса:
Если значение E равно Null, то возбуждается исключительная ситуация типа System.NullReferenceException.
Если поле является доступным только для чтения и обращение производится вне экземплярного конструктора класса в котором это поле объявлено, то результатом выражения является значение, а именно значение поля I в объекте на который ссылается E.
В противном случае результатом выражения является переменная, а именно поле I в объекте на который ссылается E.
Если T является структурой и I идентифицирует экземплярное свойство этой структуры:
Если E является значением или поле является доступным только для чтения и обращение производится вне экземплярного конструктора структуры в которой это поле объявлено, то результатом выражения является значение, а именно значение поля I в экземпляре структуры на который ссылается E.
В противном случае результатом выражения является переменная, а именно поле I в экземпляре структуры на который ссылается E.
Если I идентифицирует событие:
Если обращение к событию производится внутри класса или структуры в котором это событие объявлено, то выражение E.I обрабатывается в точности также, как если бы оно было экземплярным полем.
В противном случае результатом выражения является доступ к событию с ассоциированным с ним экземплярным выражением E.
В противном случае E.I является недопустимой ссылкой на член и возникает ошибка компиляции.
См.также: