Имеющийся в C# операторgotoпредставляет собой оператор безусловного перехода. Когда в программе встречается операторgoto,ее выполнение переходит непосредственно к тому месту, на которое указывает этот оператор. Он уже давно "вышел из употребления" в программировании, поскольку способствует созданию "макаронного" кода. Тем не менее операторgotoвсе еще находит применение — иногда даже эффективное. В этой книге не делается никаких далеко идущих выводов относительно правомочности использования оператораgotoдля управления программой. Следует, однако, подчеркнуть, что этому оператору трудно найти полезное применение, и поэтому он не особенно нужен для полноты языка программирования. Хотя в некоторых случаях он оказывается удобным и дает определенные преимущества, если используется благоразумно. В силу этих причин операторgotoупоминается только в данном разделе книги. Главный недостаток оператораgotoс точки зрения программирования заключается в том, что он вносит в программу беспорядок и делает ее практически неудобочитаемой. Но иногда применение оператораgotoможет, скорее, прояснить, чем запутать ход выполнения программы.

Для выполнения оператораgotoтребуетсяметка —действительный в C# идентификатор с двоеточием. Метка должна находиться в том же методе, где и операторgoto,а также в пределах той же самой области действия. В приведенном ниже примере программы цикл суммирования чисел от 1 до 100 организован с помощью оператораgotoи соответствующей метки.

х = 1; loopl: х++;

if(х < 100) goto loopl;

Кроме того, операторgotoможет быть использован для безусловного перехода к ветвиcaseилиdefaultв оператореswitch.Формально ветвиcaseилиdefaultвыполняют в оператореswitchроль меток. Поэтому они могут служить адресатами оператораgoto.Тем не менее операторgotoдолжен выполняться в пределах оператораswitch.Это означает, что его нельзя использовать как внешнее средство для безусловного перехода в операторswitch.В приведенном ниже примере программы демонстрируется применение оператораgotoв оператореswitch.

// Применить оператор goto в операторе switch.

using System;

class SwitchGoto { static void Main() {

for(int i=l; 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 недопустим.

}

}

Перейти на страницу:

Похожие книги