Принципы объектно-ориентированного программирования

         

Оператор switch



Оператор switch

В операторе switch вы указываете выражение, возвращающее некоторое значение и один или несколько фрагментов кода, которые будут выполняться в зависимости от результата выражения. Он аналогичен применению нескольких операторов if/else, но если в последних вы можете указать несколько условий (возможно, не связанных между собой), то в операторе switch содержится лишь один условный оператор, за которым следуют блоки, которые нужно выполнять. Вот его синтаксис:

switch (выражение-переключатель) {


case выражение-константа:

оператор

оператор_перехода

case выражение-константа_N:

onepamop_N [default]

}

Здесь нужно усвоить два правила. Во-первых, выражение-переключатель должно иметь тип sbyte, byte, short, ushort, int, uint, long, ulong, char или string (или епит на основе одного из этих типов) или же должно быть явно преобразовано в один из этих типов. Во-вторых, в каждом операторе case (кроме последнего блока) должен быть тот или иной операто-р_перехода, включая оператор break. Поскольку работает switch не так, как в некоторых других языках, я подробней остановлюсь на отличиях в разделе "Оператор switch без передачи управления вниз".

По сути оператор switch работает так же, как //. Сначала вычисляется выражение-переключатель, а затем результат сравнивается со всеми выражениями-константами или case-метками, определенными в операторах case. При обнаружении совпадения управление передается первой строке кода в соответствующем операторе case.

Кроме нескольких операторов case, в switch можно указать оператор default. Это аналогично конструкции else в операторе //. Каждый оператор switch может иметь только одну метку default. При ее отсутствии, если значение выражения-переключателя не соответствует ни одной case-метке, управление передается на первую строку после закрывающей скобки оператора switch. Рассмотрим пример, в котором класс Payment использует оператор switch для определения выбранного платежного средства:

enura Tenders : int {

Cash = 1,

Visa,

MasterCard,

AmericanExpress •.

};

class Payment

{

public Payment(Tenders tender)

<

this.Tender = tender; }

protected Tenders tender; public Tenders Tender {

get

{

return this/tender;

}

set

{

this.tender = value;

} }

public void ProcessPaymentO {

switch ((int)(this.tender)) {

case (int)Tenders.Cash:

Console.Кг11е1_1пе("\пНаличные - Принимаются"); break;

case (int)Tenders.Visa:

Console.WriteLine("\nVisa - Принимается"); break;

case (int)Tenders.MasterCard:

Console.WriteLine("\nMastercard - Принимается"); break;

case (int)Tenders.AmericanExpress:

Console.WriteLine("\nAmerican Express - Принимается"); break;

default:

Console.WriteLine("\nll3BHHHTe, недопустимое "+

"платежное средство"); break; } } }

class SwitchApp {

public static void Main() {

Payment payment = new Payment(Tenders.Visa); payment.P rocessPayment(); } >

Поскольку созданному экземпляру класса Payment мы передали значение Tenders. Visa, в результате выполнения этого приложения мы увидим:

Visa - Принимается.



Содержание раздела