Выбрать главу

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

/// <summary>

/// демонстрация блоков (составных операторов)

/// </summary>

public void Block()

{

    int limit = 100;

    int x = 120, у = 50;

    int sum1 =0, sum2=0;

    for (int i = 0; i< 11; i++)

    {

        int step = Math.Abs(limit — x)/10;

         if (x > limit)

            {x — = step; у += step;}

         else

            {x += step; у — = step;}

         sum1 += x; sum2 +=y;

     }

    //limit = step; //переменная step перестала существовать

    //limit = i; // переменная i перестала существовать

    Console.WriteLine("x= {0}, y= {1}, sum1 ={2}, sum2 = {3}",

         x, у, sum1,sum2);

}

Заметьте, здесь в тело основного блока вложен блок, задающий тело цикла, в котором объявлены две локальные переменные — i и step.

В свою очередь, в тело цикла вложены блоки, связанные с ветвями then и else оператора if. Закомментированные операторы, стоящие сразу за окончанием цикла, напоминают, что соответствующие локальные переменные, определенные в блоке, перестают существовать по его завершении.

Приведенная процедура Block является методом класса Testing, который входит в проект statements, созданный для работы с примерами этой лекции. Вот описание полей и конструктора класса Testing:

/// <summary>

/// Класс Testing — тестирующий класс. Представляет набор

/// скалярных переменных и методов, тестирующих работу

/// с операторами, процедурами и функциями С#.

/// </summary>

public class Testing

{

    public Testing(string name, int age)

    {

        this.age = age;

        this.name = name;

     }

     //поля класса

     public string name;

     public int age;

     private int period;

     private string status;

}

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

Пустой оператор — это "пусто", завершаемое точкой с запятой. Иногда полезно рассматривать отсутствие операторов как существующий пустой оператор. Синтаксически допустимо ставить лишние точки с запятой, полагая, что вставляются пустые операторы. Например, синтаксически допустима следующая конструкция:

for (int j=1; j<5; j++)

           {;;;};

Она может рассматриваться как задержка по времени, работа на холостом ходе.

Операторы выбора

Как в C++ и других языках программирования, в языке C# для выбора одной из нескольких возможностей используются две конструкции — if и switch. Первую из них обычно называют альтернативным выбором, вторую — разбором случаев.

Оператор if

Начнем с синтаксиса оператора if:

if(выражение_1) оператор_1

else if(выражение_2) оператор_2

else if(выражение_К) оператор_К

else оператор_N

Какие особенности синтаксиса следует отметить? Выражения if должны заключаться в круглые скобки и быть булевого типа. Точнее, выражения должны давать значения true или false. Напомню, арифметический тип не имеет явных или неявных преобразований к булевому типу. По правилам синтаксиса языка C++, then-ветвь оператора следует сразу за круглой скобкой без ключевого слова then, типичного для большинства языков программирования. Каждый из операторов может быть блоком — в частности, if-оператором. Поэтому возможна и такая конструкция: