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

8.2Блоки

Блок позволяет записать несколько операторов языка в контексте, обычно допускающем использование только одного оператора.

блок: { список_операторовнеобязательно }

Блок состоит из необязательного списка_операторов (§8.2.1), заключенного в фигурные скобки. Если список операторов опущен, говорят, что блок пустой.

Блок может включать операторы объявления (§8.5). Областью видимости локальной переменной или константы, объявленной в блоке, является этот блок.

Значение имени, используемого в контексте выражения, всегда должно быть одинаковым в пределах блока (§7.6.2.1).

Блок выполняется следующим образом.

  • Если блок пустой, управление передается в конечную точку блока.

  • Если блок непустой, управление передается в список операторов. Если управление достигает конечной точки списка операторов, после этого управление передается в конечную точку блока.

Список операторов блока считается достижимым, если сам блок является достижимым.

Конечная точка блока достижима, если блок пустой или если конечная точка списка операторов достижима.

Блок, содержащий один или несколько операторов yield (§8.14), называется блоком итератора. Блоки итераторов используются для реализации функций-членов в виде итераторов (§10.14). В отношении блоков итераторов действуют дополнительные ограничения.

  • Появление оператора return в блоке итератора распознается как ошибка времени компиляции (но при этом операторы yield return разрешены).

  • Наличие небезопасного контекста в блоке итератора распознается как ошибка времени компиляции (§18.1). Блок итератора всегда определяет безопасный контекст, даже если его объявление вложено в небезопасный контекст.

8.2.1Списки операторов

Список операторов состоит из одного или нескольких последовательно записанных операторов языка. Списки операторов могут входить в блоки (§8.2) и в блоки_switch (§8.7.2).

список_операторов: оператор_языка список_операторов оператор_языка

Выполнение списка операторов начинается с передачи управления первому оператору. Если управление достигает конечной точки оператора, после этого управление передается следующему оператору. Если управление достигает конечной точки последнего оператора, после этого управление передается в конечную точку списка операторов.

Оператор списка считается достижимым, если соблюдено по крайней мере одно из следующих условий.

  • Оператор является первым в списке и сам список операторов является достижимым.

  • Конечная точка предыдущего оператора достижима.

  • Оператор является помеченным и его метка указывается в достижимом операторе goto.

Конечная точка списка операторов достижима, если достижима конечная точка последнего оператора языка в списке.

8.3Пустой оператор

Пустой_оператор не выполняет никаких действий.

пустой_оператор: ;

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

Выполнение пустого оператора сводится к передаче управления в конечную точку оператора. Таким образом, конечная точка пустого оператора достижима, если достижим сам пустой оператор.

Пустой оператор может использоваться при записи оператора while с пустым телом:

bool ProcessMessage() {...}

void ProcessMessages() { while (ProcessMessage()) ; }

Кроме того, с помощью пустого оператора можно объявить метку непосредственно перед закрывающей фигурной скобкой блока:

void F() { ...

if (done) goto exit; ...

exit: ; }

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