На этом шаге мы рассмотрим особенности использования этого переключателя.
Переключатель switch позволяет выполнить проверку значения некоторого выражения. В языке C# выражение, которое проверяется с помощью конструкции выбора switch, может возвращать значение целочисленного, символьного или текстового типа. Описывается переключатель следующим образом. Сначала указывается ключевое слово switch, после которого в круглых скобках следует проверяемое выражение. Тело переключателя заключается в фигурные скобки. Там описываются case-блоки. Каждый такой блок начинается с ключевого слова case. После него указывается контрольное значение (заканчивается двоеточием). Каждый case-блок содержит набор команд, заканчивающийся инструкцией break. Контрольные значения в case-блоках сравниваются со значением выражения в switch-инструкции. Если совпадение найдено, то выполняются команды в соответствующем case-блоке. На случай, если совпадения нет, в конструкции выбора switch может быть предусмотрен блок default. Общий шаблон описания переключателя switch с тремя case-блоками представлен ниже:
switch (выражение) { case значение_1: // Команды break; case значение_2: // Команды break; case значение_3: // Команды break; default: // Команды break; }
Блок default не является обязательным - его можно не указывать совсем. На рисунке 1 показана схема, иллюстрирующая способ выполнения переключателя switch.
Рис.1. Выполнение переключателя
Таким образом, при выполнении конструкции выбора сначала вычисляется значение выражения в switch-инструкции. Полученное значение последовательно сравнивается с контрольными значениями в case-блоках. При первом же совпадении выполняются команды в соответствующем case-блоке - вплоть до инструкции break. Если совпадение не найдено и в конструкции выбора есть default-блок, то выполняются команды в этом блоке. Если совпадение не найдено и default-блока в переключателе нет, то ничего не происходит.
Несложно заметить, что в некотором смысле переключатель выбора напоминает блок из вложенных условных конструкций, хотя полной аналогии здесь, конечно, нет. Небольшой пример, в котором использован переключатель, представлен в примере ниже. Фактически это альтернативный способ реализации программы с вложенными условными конструкциями, в которой по введенному пользователем числу определяется название этого числа (см. пример 2 из 35 шага). Но на этот раз вместо условных конструкций использован переключатель switch.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.VisualBasic; namespace pr36_1 { class Program { static void Main() { // Переменная для запоминания введенного числа: int number; // Переменная для записи названия числа: string name; // Считывание числа: number = Int32.Parse( Interaction.InputBox( // Текст над полем ввода: "Введите число:", // Заголовок окна: "Число") ); // Использование переключателя для определения // названия введенного числа: switch (number) { case 1: // Если ввели число 1 name = "Единица"; // Название числа break; // Завершение блока case 2: // Если ввели число 2 name = "Двойка"; // Название числа break; // Завершение блока case 3: // Если ввели число 3 name = "Тройка"; // Название числа break; // Завершение блока case 4: // Если ввели число 4 name = "Четверка";// Название числа break; // Завершение блока default: // Ввели другое число name = "Неизвестное число"; break; // Завершение блока } // Завершение переключателя // Отображение сообщения MessageBox.Show(name, "Число"); } } }
Предыдущая версия программы была консольной. Эта версия для ввода числа и вывода сообщения использует диалоговые окна. Но это отличие "косметическое". Идеологически важное отличие состоит в том, что здесь мы используем переключатель switch. Целочисленная переменная number предназначена для записи числа, которое вводит пользователь. Текстовая переменная name нужна для того, чтобы сформировать и запомнить текстовое значение - название введенного пользователем числа. Для считывания числа используем статический метод InputBox() класса Interaction. Для преобразования текстового представления числа в целое число используем статический метод Parse() из структуры Int32. Результат записывается в переменную number.
Для проверки значения переменной number использован переключатель. Проверяемым выражением в нем является эта переменная. В case-блоках указаны контрольные значения - целые числа от 1 до 4 включительно (всего четыре case-блока). При наличии совпадения значения переменной number и контрольного значения в case-блоке получает значение переменная name (значение переменной - название введенного числа). На случай, если совпадения не будет, предусмотрен default-блок. В этом блоке значением переменной name присваивается текст, сообщающий о невозможности идентифицировать число.
Таким образом, было или не было совпадение, переменная name получит значение. Это значение используется в команде MessageBox.Show (name, "Число"), которая отображается диалоговое окно с сообщением (название числа или сообщение о том, что число неизвестно).
На рисунке 2 показано окно с полем ввода, в которое введено число 2.
Рис.2. В поле введено число 2
После подтверждения ввода появляется новое диалоговое окно, показанное на рисунке 3.
Рис.3. Окно с сообщением после ввода числа 2
Наа рисунке 4 показано окно с полем ввода, в котором пользователь указал число 5.
Рис.4. В поле введено число 5
После щелчка по кнопке ОК появляется окно с сообщением о том, что число неизвестно. Окно показано на рисунке 5.
Рис.5. Окно с сообщением после ввода числа 5
Стоит заметить, что если пользователь вместо ввода числа в окне с полем щелкнет, например, кнопку Отмена, то возникнет ошибка. Желающие могут подумать, как следует модифицировать программный код, чтобы подобная ситуация обрабатывалась корректно.
На следующем шаге мы закончим изучение этого вопроса.