Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

7.Выражения

Выражение — это последовательность операторов и операндов. В этой главе описывается синтаксис, порядок вычисления операндов и операторов, а также значение выражений.

7.1Классы выражений

Выражение может иметь один из следующих классов:

  • Значение. У каждого значения есть связанный с ним тип.

  • Переменная. У каждой переменной есть связанный с ней тип, а именно объявленный тип переменной.

  • Пространство имен. Выражение такого класса может находиться только в левой части доступа_к_члену (§7.6.4). В любом другом контексте выражение класса пространства имен вызывает ошибку времени компиляции.

  • Тип. Выражение такого класса может находиться только в левой части доступа_к_члену (§7.6.4) или быть операндом оператора as (§7.10.11), is (§7.10.10) или typeof (§7.6.11). В любом другом контексте выражение класса типа вызывает ошибку времени компиляции.

  • Группа методов, которая представляет собой набор перегруженных методов, получающихся в результате поиска члена (§7.4). У группы методов может быть связанное выражение экземпляра и связанный список аргументов типа. При вызове метода экземпляра результат вычисления выражения экземпляра становится экземпляром, который представляется оператором this (§7.6.7). Группа методов может быть частью выражения_вызова (§7.6.5) или выражения_создания_делегата (§7.6.10.5), левой стороной оператора is, а также может неявно преобразовываться в совместимый тип делегата (§6.6). В любом другом контексте выражение с классом группы методов вызывает ошибку времени компиляции.

  • Литерал null. Выражение такого класса может неявно преобразовываться в ссылочный тип или обнуляемый тип.

  • Анонимная функция. Выражение такого класса может неявно преобразовываться в совместимый тип делегата или тип дерева выражения.

  • Доступ к свойству. У каждого доступа к свойству есть связанный тип, а именно тип свойства. Кроме того, у доступа к свойству может быть связанное выражение экземпляра. При вызове метода доступа (блок get или set) в доступе к свойству экземпляра результат вычисления выражения экземпляра становится экземпляром, который представляется оператором this (§7.6.7).

  • Доступ к событию. У каждого доступа к событию есть связанный тип, а именно тип события. Кроме того, у доступа к событию может быть связанное выражение экземпляра. Доступ к событию может быть левым операндом операторов += и -= (§7.17.3). В любом другом контексте выражение с классом доступа к событию вызывает ошибку времени компиляции.

  • Доступ к индексатору. У каждого доступа к индексатору есть связанный тип, а именно тип индексатора. Кроме того, у доступа к индексатору есть связанное выражение экземпляра и связанный список аргументов. При вызове метода доступа (блок get или set) в доступе к индексатору результат вычисления выражения экземпляра становится экземпляром, который представляется оператором this (§7.6.7), а результат вычисления списка аргументов становится списком параметров вызова.

  • Класс отсутствует. Это происходит, когда выражение является вызовом метода с типом возвращаемого значения void. Выражение без класса допустимо только в контексте выражения_оператора (§8.6).

Конечным результатом выражения не может быть пространство имен, тип, группа методов или доступ к событию. Наоборот, как указано выше, данные категории выражений представляют собой промежуточные конструкции, которые допустимы только в определенных контекстах.

Доступ к свойству или доступ к индексатору всегда изменяет свой класс на значение при вызове метода доступа get или set. При ссылке на свойство как на конечный объект операции присваивания или как на операнд операторов «++» и «--» метод доступа set вызывается с аргументом, который предоставляет новое значение. В противном случае для получения текущего значения вызывается метод доступа get (§7.1.1).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]