Всем привет! С Вами wmysterio. В этом уроке мы поговорим об ещё одной блочной конструкции - операторах исключения. В этой конструкции идёт попытка выполнения некого кода, и если этот код имеет логическую ошибку, то будет выполнятся другой код. Общая конструкция выглядит следующим образом:
try {
// В начале идёт попытка выполнить этот код
} catch {
// Если попытка не удалась, то обрабатываем исключение в этом коде
}
В качестве примера, давайте напишем код, где явно можно получить ошибку - деление на ноль. Давайте создадим статическую функцию деления и коде программы укажем параметр ноль.
    class Program {
        static void Main() {
            int a = 5;
            int c = del(a, 0);
            Console.ReadKey();
        }

        public static int del( int start, int val ) {
            return start /= val;
        }   
    }
После запуска мы получим окно о ошибке:


Если запустить готовый exe-шник, то программа в лучшем случаи завершится с ошибкой. Как вы уже догадались, чтобы избежать подобной ошибки требуется написать обработчик исключения под данную ошибку. Для этого и существует блок ПОПЫТКА .. ИСКЛЮЧЕНИЕ(try .. catch), который мы сейчас внедрим в нашу программу:
        public static int del( int start, int val ) {
            try {
                return start /= val;
            } catch {
                Console.WriteLine("Невозможно делить на ноль!");
                return -1;
            }
        }
После запуска программы, мы увидим в окне следующее:


И программа работает адекватно без вылетов и конструктивно объяснили пользователю причину остановки программы.

Давайте переделаем код, чтобы пользователь вводил 2 числа с клавиатуры и нам выводилась их сумма. В предыдущих уроках мы делали подобный пример, теперь пора добавить обработчик исключения! Создадим процедуру, которая выведет на экран сумму:
        public static void del( string Va1, string Va2 ) {
            try {
                int a = int.Parse( Va1 );
                int b = int.Parse( Va2 );
                Console.WriteLine("{0}", a /= b);
            } catch {
                Console.WriteLine("Невозможно выполнить данное действие!");
            }
        }
и саму программу:
        static void Main() {
            Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );
            del( Console.ReadLine(), Console.ReadLine() );
            Console.ReadKey();
        }
Тестируем нашу программу:


Отсюда можно сделать вывод: Если возникает хотя-бы одна ошибка в блоке try, будет выполнены команды в catch. Это обезопасит программу от невнимательности пользователя и от "форс-мажор"-а. Есть так-же необязательный оператор finally, который связан с блоком попытки. там выполняются команды, которые выполняются сразу-же после обработки исключений. В наше примере можно переработать процедуру вот так:
            try {
                int a = int.Parse( Va1 );
                int b = int.Parse( Va2 );
                Console.WriteLine( "{0}", a /= b );
            } catch {
                Console.WriteLine( "Невозможно выполнить данное действие!" );
            } finally {
                Console.ReadKey();
            }
А наш код будет выглядеть следующим образом:
Код
using System;

namespace Consol {
    class Program {

        static void Main() {
            Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );
            del( Console.ReadLine(), Console.ReadLine() );
        }

        public static void del( string Va1, string Va2 ) {
            try {
                int a = int.Parse( Va1 );
                int b = int.Parse( Va2 );
                Console.WriteLine( "{0}", a /= b );
            } catch {
                Console.WriteLine( "Невозможно выполнить данное действие!" );
            } finally {
                Console.ReadKey();
            }
        }
   
    }
}
Что-же, надеюсь вы поймёте для чего нужно обрабатывать исключения smile
Вход на сайт

Поиск
Категории раздела
Мини-чат
Наш опрос
Что скажете о GTA V?
Всего ответов: 50
Активность на сайте
Друзья сайта
Статистика

Онлайн всего: 2
Гостей: 1
Пользователей: 1
wmysterio
Сегодня нас посетили:
wmysterio