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

5.3.3.25Выражения ||

Для выражения expr в форме expr-first || expr-second:

  • состояние определенного присваивания переменной v перед выражением expr-first соответствует состоянию определенного присваивания переменной v перед выражением expr;

  • переменная v перед выражением expr-second является определенно присвоенной, если состояние переменной v после выражения expr-first является определенно присвоенным или «определенно присвоенным в результате выполнения выражения с итогом false». В обратном случае она не является определенно присвоенной;

  • состояние определенного присваивания переменной v после выражения expr определяется следующими факторами:

  • если переменная v после выражения expr-first является определенно присвоенной, переменная v после выражения expr является определенно присвоенной;

  • в обратном случае, если состояние переменной v после выражения expr-second является определенно присвоенным, а состояние переменной v после выражения expr-first соответствует состоянию «определенно присвоенная в результате выполнения выражения с итогом true», переменная v после выражения expr является определенно присвоенной;

  • в обратном случае, если переменная v после выражения expr-second является определенно присвоенной или «определенно присвоенной в результате выполнения выражения с итогом false», переменная v после выражения expr является «определенно присвоенной в результате выполнения выражения с итогом false»;

  • в обратном случае, если переменная v после выражения expr-first имеет состояние «определенно присвоенная в результате выполнения выражения с итогом true», а после выражения expr-second имеет состояние «определенно присвоенная в результате выполнения выражения с итогом true», переменная v после выражения expr имеет состояние «определенно присвоенная в результате выражения с итогом true»;

  • в обратном случае переменная v после выражения expr не является определенно присвоенной.

В этом примере

class A { static void G(int x, int y) { int i; if (x >= 0 || (i = y) >= 0) { // i not definitely assigned } else { // i definitely assigned } // i not definitely assigned } }

В данном примере переменная i считается определенно присвоенной только в одном из внедренных операторов оператора if. В операторе if в методе G переменная i является определенно присвоенной во втором внедренном операторе, поскольку выполнение выражения (i = y) всегда предшествует выполнению этого внедренного оператора. Наоборот, переменная i не является определенно присвоенной в первом внедренном операторе, поскольку проверка условия x >= 0 может завершиться с итогом «true», в результате чего переменной i не будет выполнено присваивание.

5.3.3.26! Выражения !

Для выражения expr в форме ! expr-operand:

  • состояние определенного присваивания переменной v перед выражением expr-operand соответствует состоянию определенного присваивания переменной v перед выражением expr.

  • Состояние определенного присваивания переменной v после выражения expr определяется следующими факторами:

  • если переменная v после выражения expr-operand является определенно присвоенной, эта переменная после выражения expr также является определенно присвоенной;

  • если переменная v после выражения expr-operand не является определенно присвоенной, эта переменная после выражения expr также не является определенно присвоенной;

  • если переменная v после выражения expr-operand имеет состояние «определенно присвоенная в результате выполнения выражения с итогом false», эта переменная после выражения expr имеет состояние «определенно присвоенная в результате выполнения выражения с итогом true»;

  • если переменная v после выражения expr-operand имеет состояние «определенно присвоенная в результате выполнения выражения с итогом true», эта переменная после выражения expr имеет состояние «определенно присвоенная в результате выполнения выражения с итогом false».

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