// Применить оператор goto в операторе switch.
using System;
class SwitchGoto {
static void Main() {
for(int i=1; i < 5; i++) {
switch(i) {
case 1:
Console.WriteLine("В ветви case 1");
goto case 3;
case 2:
Console.WriteLine("В ветви case 2");
goto case 1;
case 3:
Console.WriteLine("В ветви case 3");
goto default;
default:
Console.WriteLine("В ветви default");
break;
}
Console.WriteLine();
}
// goto case 1; // Ошибка! Безусловный переход к оператору switch недопустим.
}
}
Вот к какому результату приводит выполнение этой программы.
В ветви case 1
В ветви case 3
В ветви default
В ветви case 2
В ветви case 1
В ветви case 3
В ветви default
В ветви case 3
В ветви default
В ветви default
Обратите внимание на то, как оператор gotoиспользуется в операторе switchдля перехода к другим его ветвям caseили к ветви default. Обратите также внимание на то, что ветви caseне оканчиваются оператором break. Благодаря тому что оператор gotoпрепятствует последовательному переходу от одной ветви caseк другой, упоминавшееся ранее правило недопущения "провалов" не нарушается, а следовательно, необходимость в применении оператора breakв данном случае отпадает. Но как пояснялось выше, оператор gotoнельзя использовать как внешнее средство для безусловного перехода к оператору switch. Так, если удалить символы комментария в начале следующей строки:
// goto case 1; // Ошибка! Безусловный переход к оператору switch недопустим.
приведенная выше программа не будет скомпилирована. Откровенно говоря, применение оператора gotoв операторе switch, в общем, не рекомендуется как стиль программирования, хотя в ряде особых случаев это может принести определенную пользу.
Ниже приведен один из полезных примеров применения оператора gotoдля выхода из глубоко вложенной части программы.
// Продемонстрировать практическое применение оператора goto.
using System;
class Use_goto {
static void Main() {
int i=0, j=0, k=0;
for(i=0; i < 10; i++) {
for(j=0; j < 10; j++ ) {
for(k=0; k < 10; k++) {
Console.WriteLine ("i, j, k: " + i + " " + j +
" " + k) ;
if(k == 3) goto stop;
}
}
}
stop:
Console.WriteLine("Остановлено! i, j, k: " + i + ", " + j + " " + k) ;
}
}
Выполнение этой программы дает следующий результат.
i, j, k: 000
i, j, k: 001
i, j, k: 002
i, j, k: 003
Остановлено! i, j, k: 0, 0 3
Если бы не оператор goto, то в приведенной выше программе пришлось бы прибегнуть к трем операторам ifи break, чтобы выйти из глубоко вложенной части этой программы. В данном случае оператор gotoдействительно упрощает код. И хотя приведенный выше пример служит лишь для демонстрации применения оператора goto, вполне возможны ситуации, в которых этот оператор может на самом деле оказаться полезным.
И последнее замечание: как следует из приведенного выше примера, из кодового блока можно выйти непосредственно, но войти в него так же непосредственно нельзя.
ГЛАВА 6 Введение в классы, объекты и методы
Эта глава служит введением в классы. Класс составляет основу языка С#, поскольку он определяет характер объекта. Кроме того, класс служит основанием для объектно-ориентированного программирования (ООП).
В пределах класса определяются данные и код. А поскольку классы и объекты относятся к основополагающим элементам С#, то для их рассмотрения требуется не одна глава книги. В данной главе рассмотрение классов и объектов начинается с их главных особенностей.
Основные положения о классах
Читать дальше