Управление потоком (C# и Java)
Обновлен: Ноябрь 2007
Операторы управления потоком, такие как if else и switch, очень похожи в языках Java и C#.
Операторы ветвления
Операторы ветвления изменяют поток выполнения программы во время выполнения согласно определенным условиям.
if, else и else if
Эти операторы одинаковы в обоих языках.
Оператор switch
В обоих языках оператор switch обеспечивает несколько условных операций ветвления. При этом разница заключается в том, что Java позволяет "проваливаться" в case и выполнять следующий case, если в конце варианта не используется оператор break. Однако в C# в конце каждого case необходимо использовать оператор break или оператор goto, и если не использовать ни одного оператора, то компилятор выдаст следующую ошибку:
Управление не может "проваливаться" из одной метки case в другую.
Обратите внимание, что там, где case не указывает какого-либо кода для выполнения при совпадении с этим case, управление проваливается к последующему case. При использовании goto в операторе switch можно только переходить в другой блок case в том же переключателе. Для перехода к case по умолчанию следует использовать goto default.. В противном случае, потребуется использовать goto case cond, где cond – совпадающее условие case, к которому требуется перейти. Другое отличие от switch в Java заключается в том, что в Java switch можно применять только для целочисленных типов, в то время как язык C# позволяет использовать switch для переменной строки.
Например, следующий синтаксис будет допустим в C#, но не в Java:
static void Main(string[] args)
{
switch (args[0])
{
case "copy":
//...
break;
case "move":
//...
goto case "delete";
case "del":
case "remove":
case "delete":
//...
break;
default:
//...
break;
}
}
Возврат goto
goto в Java – это зарезервированное ключевое слово, которое не реализовано. При этом можно использовать операторы с метками с break или continue для достижения той же цели, что и с использованием goto.
Язык C# не позволяет оператору goto переходить к оператору с меткой. При этом следует отметить, что для перехода к соответствующей метке оператор goto должен быть в области этой метки. Другими словами, goto нельзя использовать для перехода в блок оператора, хотя можно использовать для выхода из него, выхода из класса или выхода из блока finally в операторах try...catch. Использование ключевого слова goto не рекомендуется в большинстве случаев, так расходится с принятой практикой объектно-ориентированного программирования.
См. также
Основные понятия
Руководство по программированию в C#