Главная страница
Навигация по странице:

  • Результат выполнения программы (из листинга 5.4)

  • Результат выполнения программы (из листинга 5.5)

  • Пользовательские классы исключений

  • Результат выполнения программы (из листинга 5.6)

  • Васильев А.Н. Основы программирования на C#. Васильев А. Н. Программирование


    Скачать 5.54 Mb.
    НазваниеВасильев А. Н. Программирование
    АнкорВасильев А.Н. Основы программирования на C
    Дата20.09.2022
    Размер5.54 Mb.
    Формат файлаpdf
    Имя файлаVasilev_Programmirovanie-na-C-dlya-nachinayushchih-Osobennosti-y.pdf
    ТипДокументы
    #686596
    страница20 из 40
    1   ...   16   17   18   19   20   21   22   23   ...   40
    246
    try{
    //
    ȼɵɡɨɜ ɫɬɚɬɢɱɟɫɤɨɝɨ ɦɟɬɨɞɚ:
    generator(args[k]);
    //
    Ʉɨɦɚɧɞɚ ɫ ɨɲɢɛɤɨɣ (ɧɟɜɟɪɧɵɣ ɢɧɞɟɤɫ):
    symbs[1]='A';
    }
    //
    Ɉɛɪɚɛɨɬɤɚ ɨɲɢɛɤɢ ɞɟɥɟɧɢɹ ɧɚ ɧɨɥɶ
    // (
    ɜɧɭɬɪɟɧɧɢɣ ɛɥɨɤ):
    catch(DivideByZeroException e){
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɫɨɨɛɳɟɧɢɹ:
    Console.WriteLine(
    Ǝɉɟɪɜɵɣ ɜɧɭɬɪɟɧɧɢɣ catch-ɛɥɨɤ: {0}Ǝ, e.GetType().Name);
    }
    //
    Ɉɛɪɚɛɨɬɤɚ ɨɲɢɛɤɢ ɜɵɯɨɞɚ ɡɚ ɩɪɟɞɟɥɵ ɦɚɫɫɢɜɚ
    // (
    ɜɧɭɬɪɟɧɧɢɣ ɛɥɨɤ):
    catch(IndexOutOfRangeException e){
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɫɨɨɛɳɟɧɢɹ:
    Console.WriteLine(
    Ǝȼɬɨɪɨɣ ɜɧɭɬɪɟɧɧɢɣ catch-ɛɥɨɤ: {0}Ǝ, e.GetType().Name);
    }
    //
    Ɉɛɹɡɚɬɟɥɶɧɵɣ ɞɥɹ ɜɵɩɨɥɧɟɧɢɹ ɤɨɞ:
    finally{
    //
    ɗɥɟɦɟɧɬɭ ɦɚɫɫɢɜɚ ɩɪɢɫɜɚɢɜɚɟɬɫɹ ɡɧɚɱɟɧɢɟ:
    symbs[0]=(char)('A'+k);
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɫɨɨɛɳɟɧɢɹ:
    Console.WriteLine(
    Ǝɋɢɦɜɨɥ: \'{0}\'Ǝ,symbs[0]);
    }
    }
    //
    Ɉɛɪɚɛɨɬɤɚ ɜɫɟɯ ɨɲɢɛɨɤ (ɜɧɟɲɧɢɣ ɛɥɨɤ):
    catch(Exception e){
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɫɨɨɛɳɟɧɢɹ:
    Обработка исключений Console.WriteLine(
    Ǝȼɧɟɲɧɢɣ catch-ɛɥɨɤ: {0}Ǝ,e.GetType().Name);
    }
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɫɨɨɛɳɟɧɢɹ:
    Console.WriteLine(
    Ǝɐɢɤɥ ʋ{0} ɡɚɜɟɪɲɟɧ...\nƎ,k+1);
    }
    Результат выполнения программы может быть таким:
    
    Результат выполнения программы (из листинга 5.4)
    ȼɵɩɨɥɧɹɟɬɫɹ ɰɢɤɥ ʋ1:
    Ɇɟɬɨɞ ɫ ɚɪɝɭɦɟɧɬɨɦ ƎɨɞɢɧƎ ɧɚɱɢɧɚɟɬ ɪɚɛɨɬɭ
    Ɇɚɫɫɢɜ ɧɟ ɫɨɡɞɚɧ!
    ɋɢɦɜɨɥ: 'A'
    ȼɧɟɲɧɢɣ catch-ɛɥɨɤ: FormatException
    ɐɢɤɥ ʋ1 ɡɚɜɟɪɲɟɧ...
    ȼɵɩɨɥɧɹɟɬɫɹ ɰɢɤɥ ʋ2:
    Ɇɟɬɨɞ ɫ ɚɪɝɭɦɟɧɬɨɦ Ǝ-2Ǝ ɧɚɱɢɧɚɟɬ ɪɚɛɨɬɭ
    Ɇɚɫɫɢɜ ɧɟ ɫɨɡɞɚɧ!
    ɋɢɦɜɨɥ: 'B'
    ȼɧɟɲɧɢɣ catch-ɛɥɨɤ: OverflowException
    ɐɢɤɥ ʋ2 ɡɚɜɟɪɲɟɧ...
    ȼɵɩɨɥɧɹɟɬɫɹ ɰɢɤɥ ʋ3:
    Ɇɟɬɨɞ ɫ ɚɪɝɭɦɟɧɬɨɦ Ǝ5Ǝ ɧɚɱɢɧɚɟɬ ɪɚɛɨɬɭ
    ɋɨɡɞɚɧ ɦɚɫɫɢɜ: 3 4 6 12
    ɉɟɪɜɵɣ ɜɧɭɬɪɟɧɧɢɣ catch-ɛɥɨɤ: DivideByZeroException
    ɋɢɦɜɨɥ: 'C'
    ɐɢɤɥ ʋ3 ɡɚɜɟɪɲɟɧ...
    Глава 5
    248
    ȼɵɩɨɥɧɹɟɬɫɹ ɰɢɤɥ ʋ4:
    Ɇɟɬɨɞ ɫ ɚɪɝɭɦɟɧɬɨɦ Ǝ2Ǝ ɧɚɱɢɧɚɟɬ ɪɚɛɨɬɭ
    Ɉɲɢɛɤɚ ɜ ɦɟɬɨɞɟ: ɜɵɯɨɞ ɡɚ ɩɪɟɞɟɥɵ ɦɚɫɫɢɜɚ
    ɋɨɡɞɚɧ ɦɚɫɫɢɜ: 3 4
    Ɇɟɬɨɞ ɡɚɜɟɪɲɢɥ ɪɚɛɨɬɭ
    ȼɬɨɪɨɣ ɜɧɭɬɪɟɧɧɢɣ catch-ɛɥɨɤ: IndexOutOfRangeException
    ɋɢɦɜɨɥ: 'D'
    ɐɢɤɥ ʋ4 В программе, в классе с главным методом описан статический метод. Метод не возвращает результат и имеет текстовый аргумент (обозначен как num). Предполагается, что это текстовое представление целого числа. Поэтому командой int m=Int32.
    Parse(num)
    в теле метода выполняется попытка преобразовать аргумент в целое число. Эта команда размещена внутри блока, однако ошибка класса FormatException, которая может возникнуть при попытке преобразования текста в число, в блоке не обрабатывается, поскольку этот блок предназначен для обработки ошибок класса
    IndexOutOfRangeException
    . Поэтому если ошибка на этом этапе возникла, то метод завершает работу и ошибка передается во внешнюю try-catch конструкцию (если такая есть) для обработки. Но перед этим выполняется блок finally, в котором отображается значение текстовой переменной msg. Начальное значение переменной — текст
    ƎɆɚɫɫɢɜ ɧɟ ɫɨɡɞɚɧ!Ǝ. Но если преобразование текстового аргумента в число проходит успешно, а также без ошибок выполняется команда int[]
    array=new int[m], которой создается целочисленный массив, то командой msg=
    Ǝɋɨɡɞɚɧ ɦɚɫɫɢɜ:Ǝ переменной msg присваивается новое значение, а затем в операторе цикла командой msg+=
    Ǝ Ǝ+array[k] к текущему текстовому значению переменной дописывается значение элемента массива array с индексом k. Предварительно значение элементу присваивается командой array[k]=12/(4-k). Важно и то, что в операторе цикла индексная переменная k принимает значения от 0 до 4 включительно. Поэтому здесь возможны две неприятности. Во-первых, если размер массива меньше 4, то возникает ошибка, связанная с выходом за пределы массива. Во-вторых, если дело доходит до вычисления элемента с индексом 4, то получаем ошибку деления на ноль. Как отмечалось выше, ошибка выхода за пределы массива обрабатывается в блоке, в котором отображается сообщение
    Обработка исключений
    249
    соответствующего содержания. После обработки ошибки выполняется блоки команда, которая выводит сообщение о том, что метод завершил работу. Если же возникает ошибка деления на ноль, то она в методе не обрабатывается, а выбрасывается из метода для дальнейшей обработки внешними блоками обработки (если они есть, но перед этим выполняется блок finally.
    {
    i
    НАЗ А МЕТКУ Возможны следующие сценарии При вызове метода generator()
    с текстовым аргументом, который не является текстовым представлением целого числа, появляется сообщение о начале работы метода, а затем выполняется блок finally
    , выводящий сообщение о том, что массив не создан. Метод выбрасывает (генерирует и не обрабатывает) исключение класса
    FormatException
    • Это же происходит в случае, если методу в качестве аргумента передано текстовое представление для отрицательного числа, но метод выбрасывает исключение класса
    OverflowException
    • Если аргументом методу передано текстовое представление для числа не меньше
    4
    , то появляется сообщение о начале работы метода, заполняется четыре элемента массива, и их значения отображаются в консоли при выполнении блока finally
    , и выбрасывается исключение класса
    DivideByZeroException
    • Если аргументом методу передано текстовое представление для числа меньше
    4
    , то появляется сообщение о начале работы метода, создается массив соответствующего размера, массив заполняется и генерируется ошибка класса Но эта ошибка обрабатывается в блоке (появляется сообщение о выходе за пределы массива. При выполнении finally
    - блока отображается содержимое массива, а затем появляется сообщение о завершении работы метода.
    В главном методе программы командой string[] args={
    ƎɨɞɢɧƎ,
    Ǝ-2Ǝ,Ǝ5Ǝ,Ǝ2Ǝ} создается текстовый массив. Элементы массива используются для передачи аргументами методу generator(). Также командой char[] symbs=new char[1] создается вспомогательный символьный массив из одного элемента. После этого запускается оператор цикла, в котором перебираются индексы элементов массива Тело оператора цикла состоит из внешней try-catch конструкции и команды, отображающей сообщение о завершении выполнения
    Глава соответствующего цикла. Во внешнем блоке обрабатываются исключения класса Exception (то есть фактически все ошибки. При обработке исключения отображается название класса ошибки.
    Внешний блок состоит из команды, которой отображается сообщение о начале выполнения цикла, а также внутренней конструкции. Внутренний блок состоит из команд generator(args[k])
    и symbs[1]=
    ƍAƍ. Вторая из команд содержит ошибку поскольку массив symbs состоит всего из одного элемента, то элемента с индексом 1 у массива symbs нет. Выполнение данной команды приводит к ошибке класса IndexOutOfRangeException. Но команда symbs[1]=
    ƍAƍ выполняется, только если при выполнении команды generator(args[k]) не было выброшено исключение НАЗ А МЕТКУ При выполнении внутреннего блока в любом случае возникает ошибка. Это или ошибки класса
    FormatException
    ,
    OverflowException или
    DivideByZeroException
    , выбрасываемые при вызове метода generator()
    , или ошибка класса
    IndexOutOfRangeException
    , возникающая при выполнении команды Для внутреннего блока предусмотрены блоки, обрабатывающие ошибки классов DivideByZeroException и IndexOutOfRangeException. Есть также блок finally, при выполнении которого командой symbs[0]=(char)(
    ƍAƍ+k) присваивается значение единственному элементу массива symbs, а затем значение этого элемента отображается в консольном окне.
    Чтобы понять результат выполнения программы, необходимо учесть следующие обстоятельства При вызове метода generator()
    с аргументом
    ƎɨɞɢɧƎ
    происходит ошибка класса
    FormatException
    , связанная с преобразованием текста в число. Ошибка не обрабатывается во внутренней конструкции, а передается для обработки во внешнюю конструкцию. Перед этим выполняется блок из метода и блок из внутренней конструкции try-catch-finally
    • При вызове метода generator()
    с аргументом
    Ǝ-2Ǝ
    происходит ошибка класса
    OverflowException
    , которая не обрабатывается нив методе, ни во внутренней конструкции try-catch-finally
    Обработка исключений
    251
    Обработка выполняется во внешнем блоке, но предварительно выполняются блоки в методе и во внутренней конструкции При вызове методе generator()
    с аргументом
    Ǝ5Ǝ
    генерируется ошибка класса
    DivideByZeroException
    , которая не обрабатывается в методе, но обрабатывается во внутренней конструкции try-catch-finally
    . Перед обработкой выполняется блок finally из метода. Затем после выполнения кода из соответствующего внутреннего блока выполняется блок внутренней конструкции Если метод generator()
    вызывается с аргументом
    Ǝ2Ǝ
    , то генерируется ошибка класса
    IndexOutOfRangeException
    , которая обрабатывается в методе. После выполнения блока в методе выполняется блок. Метод завершает работу сообщением соответствующего содержания. После этого во внутреннем блоке при выполнении команды symbs[1]=
    ƍAƍ
    генерируется еще одно исключение класса
    IndexOutOfRangeException
    . Оно обрабатывается водном из внутренних блоков, а после него выполняется блок finally внутренней конструкции Генерирование исключений Тормози Как я могу затормозить, когда ты всю тормозную жидкость выпил?
    из к/ф «Кин-дза-дза»
    Исключения можно генерировать преднамеренно. Речь идет не о том, чтобы написать команду, выполнение которой приводит к ошибке. Речь идет об использовании специальной инструкции, выполнение которой имеет такие же последствия, как и возникновение ошибки.
    Сгенерировать исключение достаточно просто. Для этого используют инструкцию throw, после которой указывается объект исключения. Объект исключения можно создать в явном виде (то есть так, как создаются объекты обычных классов. Также в блоке можно воспользоваться объектом, созданным автоматически при возникновении реальной ошибки (повторное генерирование исключения. Правда
    Глава исключение, перехваченное в блоке, может быть сгенерировано повторно и более простым способом. Для этого используют инструкцию throw
    , не указывая явно объект исключения НАЗ А МЕТКУ Само по себе создание объекта на основе класса исключения не означает генерирования исключения. Необходимо использовать инструкцию throw
    , после которой указать объект исключения.
    В листинге 5.5 представлена программа, в которой искусственно генерируются исключения.
    
    Листинг 5.5. Генерирование исключений System;
    //
    Ʉɥɚɫɫ ɫ ɝɥɚɜɧɵɦ ɦɟɬɨɞɨɦ:
    class ThrowDemo{
    //
    Ƚɥɚɜɧɵɣ ɦɟɬɨɞ:
    static void Main(){
    //
    ȼɧɟɲɧɢɣ try-ɛɥɨɤ:
    try{
    //
    ȼɧɭɬɪɟɧɧɢɣ try-ɛɥɨɤ:
    try{
    Console.WriteLine(
    Ǝɋɟɣɱɚɫ ɛɭɞɟɬ ɨɲɢɛɤɚ...Ǝ);
    //
    Ƚɟɧɟɪɢɪɨɜɚɧɢɟ ɢɫɤɥɸɱɟɧɢɹ:
    throw new ArithmeticException(
    ƎɄɚɤɚɹ-ɬɨ ɨɲɢɛɤɚƎ);
    }
    //
    ɉɟɪɟɯɜɚɬ ɢɫɤɥɸɱɟɧɢɹ ɜɨ ɜɧɭɬɪɟɧɧɟɦ ɛɥɨɤɟ:
    catch(ArithmeticException e){
    Console.WriteLine(e.Message);
    //
    ɉɨɜɬɨɪɧɨɟ ɝɟɧɟɪɢɪɨɜɚɧɢɟ ɢɫɤɥɸɱɟɧɢɹ:
    throw;
    }
    }
    Обработка исключений //
    ɉɟɪɟɯɜɚɬ ɢɫɤɥɸɱɟɧɢɹ ɜɨ ɜɧɟɲɧɟɦ ɛɥɨɤɟ:
    catch(ArithmeticException e){
    Console.WriteLine(
    Ǝȿɳɟ ɪɚɡ: \Ǝ{0}\ƎƎ,e.Message);
    }
    Результат выполнения программы представлен ниже:
    
    Результат выполнения программы (из листинга 5.5)
    ɋɟɣɱɚɫ ɛɭɞɟɬ ɨɲɢɛɤɚ...
    Ʉɚɤɚɹ-ɬɨ ɨɲɢɛɤɚ
    ȿɳɟ ɪɚɡ: ƎɄɚɤɚɹ-ɬɨ В этой программе используются вложенные блоки. Во внутреннем блоке после выполнения команды Console.WriteLine(
    Ǝɋɟɣ-
    ɱɚɫ ɛɭɞɟɬ ɨɲɢɛɤɚ...Ǝ) генерируется исключение класса
    ArithmeticException
    . Для этого мы использовали инструкцию throw, после которой указана команда new ArithmeticException(
    ƎɄɚɤɚɹ-ɬɨ
    ɨɲɢɛɤɚƎ) создания анонимного объекта класса ArithmeticException. Текст, переданный в качестве аргумента конструктору класса, становится значением свойства Message объекта исключения НАЗ А МЕТКУ В принципе, мы могли бы создать обычный (не анонимный) объект класса
    ArithmeticException
    , а затем указать этот объект в throw
    - инструкции. Еще раз подчеркнем, что само по себе создание объекта исключения не приводит к генерированию ошибки.
    Перехват сгенерированного исключения выполняется во внутреннем блоке. Там командой Console.WriteLine(e.Message) отображается описание ошибки, а затем командой throw исключение генерируется повторно. Важный момент состоит в том, что объект исключения точно тот же, что был создан ранее при искусственном генерировании исключения. Проверить это легко. Повторно сгенери- рованное исключение перехватывается и обрабатывается во внешнем блоке. В нем отображается значение свойства Message объекта
    Глава исключения, и оно такое же, как аргумент, переданный конструктору класса ArithmeticException при создании объекта исключения.
    Механизм искусственного генерирования исключений используется в самых разных ситуациях (например, для множественной обработки исключений) и позволяет значительно повысить гибкость программного кода.
    Пользовательские классы исключений
    Рации у нас нет, мы ее выкинули.
    из к/ф «Кин-дза-дза»
    Мы можем создать собственный класс исключений. Схема очень простая и базируется на механизме наследования классов. Пользовательский класс исключения обычно создается наследованием класса (или Exception). Объекты такого класса могут иметь дополнительные свойства и методы, ориентированные на решение определенной прикладной задачи. Генерируются исключения пользовательских классов искусственно, а перехватываются и обрабатываются таким же способом, как и другие исключения. Программа, в которой описывается класс пользовательского исключения, а затем генерируется и обрабатывается исключение пользовательского типа, представлена в листинге Листинг 5.6. Пользовательские классы исключений System;
    //
    Ʉɥɚɫɫ ɩɨɥɶɡɨɜɚɬɟɥɶɫɤɨɝɨ ɢɫɤɥɸɱɟɧɢɹ:
    class MyException:ApplicationException{
    //
    Ɂɚɤɪɵɬɨɟ ɰɟɥɨɱɢɫɥɟɧɧɨɟ ɩɨɥɟ:
    private int code;
    //
    Ʉɨɧɫɬɪɭɤɬɨɪ:
    public MyException(int n,string txt):base(txt){
    code=n;
    }
    //
    ɉɟɪɟɨɩɪɟɞɟɥɟɧɢɟ ɦɟɬɨɞɚ ToString():
    Обработка исключений public override string ToString(){
    //
    Ɍɟɤɫɬɨɜɚɹ ɫɬɪɨɤɚ:
    string res=Message+
    Ǝ\nɄɨɞ ɨɲɢɛɤɢ: Ǝ+code;
    //
    Ɋɟɡɭɥɶɬɚɬ ɦɟɬɨɞɚ:
    return res;
    }
    }
    //
    Ƚɥɚɜɧɵɣ ɤɥɚɫɫ:
    class MyExceptionDemo{
    //
    Ƚɥɚɜɧɵɣ ɦɟɬɨɞ:
    static void Main(){
    //
    Ʉɨɧɬɪɨɥɢɪɭɟɦɵɣ ɤɨɞ:
    try{
    //
    Ƚɟɧɟɪɢɪɨɜɚɧɢɟ ɩɨɥɶɡɨɜɚɬɟɥɶɫɤɨɝɨ ɢɫɤɥɸɱɟɧɢɹ:
    throw new MyException(123,
    ƎȻɨɥɶɲɚɹ ɨɲɢɛɤɚƎ);
    }
    //
    ɉɟɪɟɯɜɚɬ ɢ ɨɛɪɚɛɨɬɤɚ ɢɫɤɥɸɱɟɧɢɹ:
    catch(Exception e){
    Console.WriteLine(e);
    }
    Ниже показано, как выглядит результат выполнения программы:
    
    Результат выполнения программы (из листинга 5.6)
    Ȼɨɥɶɲɚɹ ɨɲɢɛɤɚ
    Ʉɨɞ ɨɲɢɛɤɢ: Мы описали класс MyException, который наследует класс
    ApplicationException
    . В классе описано закрытое целочисленное поле code, а также мы описали конструктор класса с двумя аргументами. Первый целочисленный аргумент определяет значение поля code.
    Глава Второй текстовый аргумент передается конструктору базового класса. Поэтому текстовый аргумент конструктора класса MyException определяет свойство Message объекта исключения. Кроме этого, в классе
    MyException переопределяется метод ToString(). Результатом метод возвращает текстовую строку, которая содержит описание ошибки значение свойства Message) и значение поля В главном методе программы в контролируемом блоке командой throw new MyException(123,
    ƎȻɨɥɶɲɚɹ ɨɲɢɛɤɚƎ) генерируется исключение пользовательского типа. Для перехвата исключения использован блок, в котором указано имя класса Exception. Поскольку класс MyException является производным от класса
    ApplicationException
    , а он, в свою очередь, является производным от класса Exception, то данный блок перехватывает сгенериро- ванное исключение. Обработка исключения состоит в том, что выполняется команда Console.WriteLine(e). Для объекта исключения e автоматически вызывается метод ToString(), ив итоге в консольном окне появляется сообщение с описанием ошибки и значением целочисленного поля объекта ошибки. Эти значения были указаны при создании объекта исключения в команде с ключевым словом Инструкции checked и Ребята Со спичкой мы пошутили. Мы радость хотели доставить вам!
    из к/ф «Кин-дза-дза»
    В некоторых случаях удобно использовать инструкции checked и unchecked. С помощью инструкции checked можно выделить блок или выражение, которые в таком случае контролируются на предмет переполнения (выхода значения за допустимые границы. Если происходит переполнение, то генерируется исключение класса
    OverflowException
    . Шаблон использования инструкции checked для выделения блока команд такой //
    Ʉɨɦɚɧɞɵ
    }
    Обработка исключений
    257
    Если мы хотим контролировать отдельное выражение, то шаблон использования инструкции checked будет следующим:
    checked(
    ɜɵɪɚɠɟɧɢɟ)
    Напротив, инструкция unchecked используется, если мы не хотим, чтобы при переполнении генерировалось исключение класса. Шаблоны использования инструкции unchecked такие же, как и для инструкции checked. Если с помощью инструкции unchecked контролируем блок кода, то используем такой шаблон // Если с помощью инструкции unchecked контролируется отдельное выражение, то используется оно следующим образом:
    unchecked(
    ɜɵɪɚɠɟɧɢɟ)
    Стоит сразу заметить, что по умолчанию используется режим, при котором исключения в случае переполнения не генерируется. С другой стороны, использование инструкций checked и unchecked оправдывается тем, что в общем случае могут быть задействованы разные глобальные настройки среды выполнения и применение инструкций позволит в явном виде идентифицировать способ реагирования на возникновение пе- реполнения.
    Программа, в которой есть пример использования инструкций checked и unchecked, представлена в листинге Листинг 5.7. Инструкции checked и unchecked

    using System;
    //
    Ʉɥɚɫɫ ɫ ɝɥɚɜɧɵɦ ɦɟɬɨɞɨɦ:
    class CheckedDemo{
    //
    Ƚɥɚɜɧɵɣ ɦɟɬɨɞ:
    static void Main(){
    //
    ɉɟɪɟɦɟɧɧɵɟ:
    byte a=100,b=200,c;
    Глава 5
    258
    //
    Ʉɨɧɬɪɨɥɢɪɭɟɦɵɣ ɤɨɞ:
    try{
    //
    ɉɪɨɜɟɪɤɚ ɧɚ ɩɪɟɞɦɟɬ ɩɟɪɟɩɨɥɧɟɧɢɹ:
    c=checked((byte)(a+b));
    }
    //
    Ɉɛɪɚɛɨɬɤɚ ɢɫɤɥɸɱɟɧɢɹ:
    catch(OverflowException){
    Console.WriteLine(
    Ǝȿɫɬɶ ɨɲɢɛɤɚ: Ǝ+(a+b));
    }
    //
    ɇɟɬ ɩɪɨɜɟɪɤɢ ɧɚ ɩɪɟɞɦɟɬ ɩɟɪɟɩɨɥɧɟɧɢɹ:
    c=unchecked((byte)(a+b));
    Console.WriteLine(
    Ǝɇɟɬ ɨɲɢɛɤɢ: Ǝ+c);
    Результат выполнения программы будет следующим:
    
    1   ...   16   17   18   19   20   21   22   23   ...   40


    написать администратору сайта