Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 28
Текст из файла (страница 28)
Таким образом, оператор сопсьпце служит своего рода дополнением оператора Ьгеа)4. В приведенном ниже примере программы оператор сопт1пце используется в качестве вспомогательного средства для вывода четных чисел в пределах от 0 до 100. // Применить оператор сопз1пце. цяхпч зуяяекч с1азз СопСОешо ( ззаз1с то14( Маяп() ( // вывести четные числа от 0 до 100. бог(хпз 1 = 0; 1 <= 100; 1++) ( 15((1$2) != 0) сопзхпце; // перейти к следующему // шагу итерации Сопзо1е.иг1яеъ1пе(1)4 ) ) ) В данном примере выводятся только четные числа, поскольку при обнаружении нечетного числа шаг итерации цикла завершается преждевременно в обход вызова метода Игтте)1пе().
Глава 5. Управляющие операторы 139 В циклах ып11е и г)о-ы)т11е оператор сопглпое вызывает передачу управления непосредственно условному выражению, после чего продолжается процесс выполнения цикла. А в цикле лог сначала вычисляется итерационное выражение, затем условное выражение, после чего цикл продолжается. Оператор сопг1пие редко находит удачное применение, в частности, потому, что в С№ предоставляется богатый набор операторов цикла, удовлетворяющих большую часть прикладных потребностей.
Но в тех особых случаях, когда требуется преждевременное прерывание шага итерации цикла, оператор сопл1пие предоставляет структурированный способ осуществления такого прерывания. ОпЕратОр ге~ягп Оператор лег цгп организует возврат из метода. Его можно также использовать для возврата значения. Более подробно он рассматривается в главе 6. Оператор дойо Имеющийся в С№ оператор доло представляет собой оператор безусловного перехода.
Когда в программе встречается оператор доло, ее выполнение переходит непосредственно к тому месту, на которое указывает этот оператор. Он уже давно не применяется в программировании, поскольку способствует созданию "макаронного" кода. Тем не менее оператор доло все еще находит применение — иногда даже эффективное. В этой книге не делается никаких далеко идущих выводов относительно правомочности использования оператора доло для управления программой. Следует, однако, подчеркнуть, что этому оператору трудно найти применение, и поэтому он не особенно нужен для полноты языка программирования. Хотя в некоторых случаях он оказывается удобным и дает определенные преимущества, если используется благоразумно.
В силу этих причин оператор доло упоминается только в данном разделе книги. Главный недостаток оператора доло с точки зрения программирования заключается в том, что он вносит в программу беспорядок и делает ее практически неудобочитаемой. Но иногда применение оператора доло может все же прояснить, а не запугать ход выполнения программы. Для выполнения оператора доло требуется метка — действительный в С№ идентификатор с двоеточием.
Метка должна находиться в том же методе, где и оператор доло, а также в пределах той же самой области действия. В приведенном ниже примере программы цикл суммирования чисел от 1 до 100 организован с помощью оператора доло и соответствующей метки. х=1; 1оор1: хяэ; 11(х < 100) доло 1оор1т Кроме того, оператор доло может быть использован для безусловного перехода к ветви сазе или с)елао1С в операторе зылгс)ь Формально ветви сазе или г)елао1С выполняют в операторе зылгсл роль меток. Поэтому они могут служить адресами оператора доло. Тем не менее оператор доло должен выполняться в пределах оператора зылгс) ь Это означает, что его нельзя использовать как внешнее средство для безусловного перехода в оператор зылсс) ь В приведенном ниже примере программы демонстрируется применение оператора доло в операторе зы1ес) ь 140 часть ), язык С» // применить оператор дого в операторе знтгсп.
озгпд Зуягепи с1аяя Знтссвооко ( зсас1с то1б Иаьп() Гог(гпс г 1; 1 < 5к г++) ( зн1ссв(1) ( саяе 1: Сопзо1е.иг беЬ1пе("В ветви саяе 1"); доге саяе 3; сазе 2: Сопзо1е.иг1сеЬ1пе("В ветви сазе 2"); доко саве 1) сазе 3: сопяо1е.иг1геь1пе("В ветви саяе 3")) досо бесао1ск бетаи1С: Сопзо1е.нг1сеЬ1пе("В ветви Песаи1Г")) Ьгеаьи ) Сопяо1е.иг1севхпе() ) // досо сазе 1; // Ошибка! Безусловный переход в // оператор яньссь недопустим. ) ) Вот к какому результату приводит выполнение втой программы: В ветви саяе 1 В ветви саяе 3 В ветви бетао1С В ветви саяе 2 В ветви саяе 1 В ветви саяе 3 В ветви бетао11 В ветви сазе 3 В ветви к(етап1Г В ветви «)етап1Г Обратите внимание иа то, как оператор дото используется в операторе яихгсЬ для перехода к другим его ветвям сазе или к ветви <)е 5ао11.
Обратите также внимание на то, что ветви саяе не оканчиваются оператором Ьгеа)<. Благодаря тому что оператор досо препятствует последовательному переходу от одной ветви сазе к другой, упоминавшееся ранее правило недопущения "провалов" не нарушается, а следовательно, необходимость в применении оператора Ьгеа)к в данном случае отпадает. Но как пояснялось выше, оператор досо нельзя использовать как внешнее средство для безусловного перехода в оператор знЬСсЬ. Так, если удалить символы комментария в начале следующей строкш Глава 5. Управавюо(ив операторы 141 // Оого сазе 13 // Ошибка! Безусловный переход в // оператор знкгсн недопустим.
приведенная выше программа ие будет скомпилироваиа. Откровенно говоря, применение оператора 33ого в операторе зи1гс)3, в общем, ие рекомендуется как стиль программироваиия, хотя в ряде особых случаев зто может принести определенную пользу. Ниже приведена программа, которая служит одним из полезных примеров применения оператора с3осо для выхода из глубоко вложенной части программы. // Продемонстрировать практическое применение оператора сосо. пз1по Зузпекч с1взз Озе допо ( згве1с чо1с( Махи() ( 1пг 1=0, 3=0, К=03 тот(1=03 1 < 103 1++) ( Гог(3=03 3 < 1О3 зьь ) ( Гог(К От К < 1О3 К++) ( сопзо1е.иг1сеь1пе("1, 3, )с: " + 3.
ь " " т 3 + "+ К)3 1г(К = 3) дого хвор) ) ) есор' Сопзо1е.Игагеькпе("Остановлено! 1, 3, К: " + 1 т "+к); Выполнение этой программы дает следующий результат: 1, 3, 3с: О 0 0 1, 3, 3с: О О 1 3., 3, 3с: 0 0 2 1,5,3с:003 Остановлено! 1, 3, К: О, 0 3 Если бы ие оператор 33осо, то в приведенной выше программе пришлось бы прибегиуть к трем операторам 11 и 13геаК, чтобы выйти из глубоко вложенной части этой программы. В данном случае оператор посо действительно упрощает код.
И хотя приведениый выше пример служит лишь для демонстрации применения оператора с3осо, вполне возможны ситуации, в которых этот оператор может иа самом деле оказаться полезным. И последнее замечание: как следует из приведенного выше примера, из кодового блока можно выйти непосредственно, ио войти в него так же непосредственно нельзя. ГЛАВА Введение в классы, обьекты и методы та глава служит введением в классы.
Класс составляет основу языка С№, поскольку он определяет характер объекта. Кроме того, класс служит основанием для объектно-ориентированного программирования (ООП). В пределах класса определяются данные и код. А поскольку классы и объекты относятся к основополагающим элементам С№, то для их рассмотрения требуется не одна глава книги. В данной главе рассмотрение классов и объектов начинается с их главных особенностей. Основные положения о классах Классы использовались в примерах программ с самого начала этой книги. Разумеется, это были лишь самые простые классы, что не позволяло выгодно воспользоваться большинством их возможностей.
На самом же деле классы намного более эффективны, чем это следует из приведенных ранее примеров их ограниченного применения. Начнем рассмотрение классов с основных положений. Класс представляет собой шаблон, по которому определяется форма объекта. В нем указываются данные и код, который будет оперировать этими данными.
В С№ используется спецификация класса для построения объектов, которые являются экземплярами класса. Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта. При этом очень важно подчеркнуть, что класс является логической абстракцией. Физическое представление класса появится в оперативной памяти лишь после того, как будет создан объект этого класса. Общая форма определения класса При определении класса объявляются данные, которые он содержит, а также код, оперирующий этими данными. Если самые простые классы могут содержать только код или только данные, то большинство настоящих классов содержат и то и другое.