Типы исключений c#. Отладка и обработка исключительных ситуаций. Выбрасывание исключений. Создание объектов Exception

В пятом веке до нашей эры древнегреческий философ Зенон Элейский сформулировал свои знаменитые апории, самой известной из которых является апория "Ахиллес и черепаха". Вот как она звучит:

Допустим, Ахиллес бежит в десять раз быстрее, чем черепаха, и находится позади неё на расстоянии в тысячу шагов. За то время, за которое Ахиллес пробежит это расстояние, черепаха в ту же сторону проползёт сто шагов. Когда Ахиллес пробежит сто шагов, черепаха проползёт ещё десять шагов, и так далее. Процесс будет продолжаться до бесконечности, Ахиллес так никогда и не догонит черепаху.

Это рассуждение стало логическим шоком для всех последующих поколений. Аристотель, Диоген, Кант, Гегель, Гильберт... Все они так или иначе рассматривали апории Зенона. Шок оказался настолько сильным, что "... дискуссии продолжаются и в настоящее время, прийти к общему мнению о сущности парадоксов научному сообществу пока не удалось... к исследованию вопроса привлекались математический анализ, теория множеств, новые физические и философские подходы; ни один из них не стал общепризнанным решением вопроса... " [Википедия, " Апории Зенона "]. Все понимают, что их дурят, но никто не понимает, в чем заключается обман.

С точки зрения математики, Зенон в своей апории наглядно продемонстрировал переход от величины к . Этот переход подразумевает применение вместо постоянных. Насколько я понимаю, математический аппарат применения переменных единиц измерения либо ещё не разработан, либо его не применяли к апории Зенона. Применение же нашей обычной логики приводит нас в ловушку. Мы, по инерции мышления, применяем постоянные единицы измерения времени к обратной величине. С физической точки зрения это выглядит, как замедление времени до его полной остановки в момент, когда Ахиллес поравняется с черепахой. Если время останавливается, Ахиллес уже не может перегнать черепаху.

Если перевернуть привычную нам логику, всё становится на свои места. Ахиллес бежит с постоянной скоростью. Каждый последующий отрезок его пути в десять раз короче предыдущего. Соответственно, и время, затрачиваемое на его преодоление, в десять раз меньше предыдущего. Если применять понятие "бесконечность" в этой ситуации, то правильно будет говорить "Ахиллес бесконечно быстро догонит черепаху".

Как избежать этой логической ловушки? Оставаться в постоянных единицах измерения времени и не переходить к обратным величинам. На языке Зенона это выглядит так:

За то время, за которое Ахиллес пробежит тысячу шагов, черепаха в ту же сторону проползёт сто шагов. За следующий интервал времени, равный первому, Ахиллес пробежит ещё тысячу шагов, а черепаха проползет сто шагов. Теперь Ахиллес на восемьсот шагов опережает черепаху.

Этот подход адекватно описывает реальность без всяких логических парадоксов. Но это не полное решение проблемы. На Зеноновскую апорию "Ахиллес и черепаха" очень похоже утверждение Эйнштейна о непреодолимости скорости света. Эту проблему нам ещё предстоит изучить, переосмыслить и решить. И решение нужно искать не в бесконечно больших числах, а в единицах измерения.

Другая интересная апория Зенона повествует о летящей стреле:

Летящая стрела неподвижна, так как в каждый момент времени она покоится, а поскольку она покоится в каждый момент времени, то она покоится всегда.

В этой апории логический парадокс преодолевается очень просто - достаточно уточнить, что в каждый момент времени летящая стрела покоится в разных точках пространства, что, собственно, и является движением. Здесь нужно отметить другой момент. По одной фотографии автомобиля на дороге невозможно определить ни факт его движения, ни расстояние до него. Для определения факта движения автомобиля нужны две фотографии, сделанные из одной точки в разные моменты времени, но по ним нельзя определить расстояние. Для определения расстояния до автомобиля нужны две фотографии, сделанные из разных точек пространства в один момент времени, но по ним нельзя определить факт движения (естественно, ещё нужны дополнительные данные для расчетов, тригонометрия вам в помощь). На что я хочу обратить особое внимание, так это на то, что две точки во времени и две точки в пространстве - это разные вещи, которые не стоит путать, ведь они предоставляют разные возможности для исследования.

среда, 4 июля 2018 г.

Очень хорошо различия между множеством и мультимножеством описаны в Википедии . Смотрим.

Как видите, "во множестве не может быть двух идентичных элементов", но если идентичные элементы во множестве есть, такое множество называется "мультимножество". Подобную логику абсурда разумным существам не понять никогда. Это уровень говорящих попугаев и дрессированных обезьян, у которых разум отсутствует от слова "совсем". Математики выступают в роли обычных дрессировщиков, проповедуя нам свои абсурдные идеи.

Когда-то инженеры, построившие мост, во время испытаний моста находились в лодке под мостом. Если мост обрушивался, бездарный инженер погибал под обломками своего творения. Если мост выдерживал нагрузку, талантливый инженер строил другие мосты.

Как бы математики не прятались за фразой "чур, я в домике", точнее "математика изучает абстрактные понятия", есть одна пуповина, которая неразрывно связывает их с реальностью. Этой пуповиной являются деньги. Применим математическую теорию множеств к самим математикам.

Мы очень хорошо учили математику и сейчас сидим в кассе, выдаем зарплату. Вот приходит к нам математик за своими деньгами. Отсчитываем ему всю сумму и раскладываем у себя на столе на разные стопки, в которые складываем купюры одного достоинства. Затем берем с каждой стопки по одной купюре и вручаем математику его "математическое множество зарплаты". Поясняем математику, что остальные купюры он получит только тогда, когда докажет, что множество без одинаковых элементов не равно множеству с одинаковыми элементами. Вот здесь начнется самое интересное.

В первую очередь, сработает логика депутатов: "к другим это применять можно, ко мне - низьзя!". Дальше начнутся уверения нас в том, что на купюрах одинакового достоинства имеются разные номера купюр, а значит их нельзя считать одинаковыми элементами. Хорошо, отсчитываем зарплату монетами - на монетах нет номеров. Здесь математик начнет судорожно вспоминать физику: на разных монетах имеется разное количество грязи, кристаллическая структура и расположение атомов у каждой монеты уникально...

А теперь у меня самый интересный вопрос: где проходит та грань, за которой элементы мультимножества превращаются в элементы множества и наоборот? Такой грани не существует - всё решают шаманы, наука здесь и близко не валялась.

Вот смотрите. Мы отбираем футбольные стадионы с одинаковой площадью поля. Площадь полей одинакова - значит у нас получилось мультимножество. Но если рассматривать названия этих же стадионов - у нас получается множество, ведь названия разные. Как видите, один и тот же набор элементов одновременно является и множеством, и мультимножеством. Как правильно? А вот здесь математик-шаман-шуллер достает из рукава козырный туз и начинает нам рассказывать либо о множестве, либо о мультимножестве. В любом случае он убедит нас в своей правоте.

Чтобы понять, как современные шаманы оперируют теорией множеств, привязывая её к реальности, достаточно ответить на один вопрос: чем элементы одного множества отличаются от элементов другого множества? Я вам покажу, без всяких "мыслимое как не единое целое" или "не мыслимое как единое целое".

воскресенье, 18 марта 2018 г.

Сумма цифр числа - это пляска шаманов с бубном, которая к математике никакого отношения не имеет. Да, на уроках математики нас учат находить сумму цифр числа и пользоваться нею, но на то они и шаманы, чтобы обучать потомков своим навыкам и премудростям, иначе шаманы просто вымрут.

Вам нужны доказательства? Откройте Википедию и попробуйте найти страницу "Сумма цифр числа". Её не существует. Нет в математике формулы, по которой можно найти сумму цифр любого числа. Ведь цифры - это графические символы, при помощи которых мы записываем числа и на языке математики задача звучит так: "Найти сумму графических символов, изображающих любое число". Математики эту задачу решить не могут, а вот шаманы - элементарно.

Давайте разберемся, что и как мы делаем для того, чтобы найти сумму цифр заданного числа. И так, пусть у нас есть число 12345. Что нужно сделать для того, чтобы найти сумму цифр этого числа? Рассмотрим все шаги по порядку.

1. Записываем число на бумажке. Что же мы сделали? Мы преобразовали число в графический символ числа. Это не математическое действие.

2. Разрезаем одну полученную картинку на несколько картинок, содержащих отдельные цифры. Разрезание картинки - это не математическое действие.

3. Преобразовываем отдельные графические символы в числа. Это не математическое действие.

4. Складываем полученные числа. Вот это уже математика.

Сумма цифр числа 12345 равна 15. Вот такие вот "курсы кройки и шитья" от шаманов применяют математики. Но это ещё не всё.

С точки зрения математики не имеет значения, в какой системе счисления мы записываем число. Так вот, в разных системах счисления сумма цифр одного и того же числа будет разной. В математике система счисления указывается в виде нижнего индекса справа от числа. С большим числом 12345 я не хочу голову морочить, рассмотрим число 26 из статьи про . Запишем это число в двоичной, восьмеричной, десятичной и шестнадцатеричной системах счисления. Мы не будем рассматривать каждый шаг под микроскопом, это мы уже сделали. Посмотрим на результат.

Как видите, в разных системах счисления сумма цифр одного и того же числа получается разной. Подобный результат к математике никакого отношения не имеет. Это всё равно, что при определении площади прямоугольника в метрах и сантиметрах вы получали бы совершенно разные результаты.

Ноль во всех системах счисления выглядит одинаково и суммы цифр не имеет. Это ещё один аргумент в пользу того, что . Вопрос к математикам: как в математике обозначается то, что не является числом? Что, для математиков ничего, кроме чисел, не существует? Для шаманов я могу такое допустить, но для ученых - нет. Реальность состоит не только из чисел.

Полученный результат следует рассматривать как доказательство того, что системы счисления являются единицами измерения чисел. Ведь мы не можем сравнивать числа с разными единицами измерения. Если одни и те же действия с разными единицами измерения одной и той же величины приводят к разным результатам после их сравнения, значит это не имеет ничего общего с математикой.

Что же такое настоящая математика? Это когда результат математического действия не зависит от величины числа, применяемой единицы измерения и от того, кто это действие выполняет.

Табличка на двери Открывает дверь и говорит:

Ой! А это разве не женский туалет?
- Девушка! Это лаборатория по изучению индефильной святости душ при вознесении на небеса! Нимб сверху и стрелочка вверх. Какой еще туалет?

Женский... Нимб сверху и стрелочка вниз - это мужской.

Если у вас перед глазами несколько раз в день мелькает вот такое вот произведение дизайнерского искусства,

Тогда не удивительно, что в своем автомобиле вы вдруг обнаруживаете странный значок:

Лично я делаю над собой усилие, чтобы в какающем человеке (одна картинка), увидеть минус четыре градуса (композиция из нескольких картинок: знак минус, цифра четыре, обозначение градусов). И я не считаю эту девушку дурой, не знающей физику. Просто у неё дугой стереотип восприятия графических образов. И математики нас этому постоянно учат. Вот пример.

1А - это не "минус четыре градуса" или "один а". Это "какающий человек" или число "двадцать шесть" в шестнадцатеричной системе счисления. Те люди, которые постоянно работают в этой системе счисления, автоматически воспринимают цифру и букву как один графический символ.

Включает такую нужную для многих функцию, как калькулятор степеней. С его помощью выполнить возведение числа в степень проще простого, задайте выражение — получите результат. Калькулятор производит возведение в степень онлайн , как и любые другие функции, прямо на нашем сайте.

Как возвести число в степень в калькуляторе?

Возведение в степень — это действие умножения числа самого на себя n раз, где число x y — степень, x — основание степени, y=n — показатель степени. Чтобы возвести в степень на калькуляторе, используйте соответствующие кнопки на панели управления. Если вам нужна более подробная информация по работе с цифровой панелью калькулятора, перейдите на страницу .

Функция возведения в степень в калькуляторе представлена пятью кнопками: возведение в квадрат, возведение в куб, возведение в n степень произвольного числа, возведение в степень основания равного 10-ти и возведение в степень экспоненты.

Кнопки калькулятора, отвечающие за возведение в степень:

Возведение в квадрат и в куб

Первой степенью числа является само число. Любое число в нулевой степени равно 1. Возведение в квадрат — вторая степень, куб — третья. Квадрат числа всегда имеет положительное значение, за исключением квадрата комплексных чисел.

Эти кнопки калькулятора упрощают ввод операции: х 2 — возведение в квадрат, х 3 — в куб. Одним нажатием в поле ввода вставляется запись вида ^2 или ^3.

Пример возведение в квадрат и куб:

Возведение в n степень

Наш онлайн калькулятор возведение в степень обозначает обычной «двухэтажной» записью на дисплее, а вот в поле ввода выражения нужно, конечно, использовать циркумфлекс.

Пример возведение чисел в степень:

Вычисление степени числа 10

Нажатие этой кнопки вставляет в поле ввода запись вида: 10^(), т.е. основанием степени записывается число 10. Удобно применять, когда нужно написать возведение в какую-нибудь степень именно числа 10.

Пример, как найти степень числа 10:

Экспонента в степени

Нажав на кнопку, увидите в строке запись exp(). Чтобы посчитать число е в степени, нужно возвести число Эйлера в степень e x = exp(x). Кому интересно знать, чему равно число е: его значение 2.71828182845905.

Пример, как возвести е в степень:

Возведение в дробную степень

Допустим, нас интересует дробная степень числа x y1/y2 . Так как возведение в степень — действие, обратное к извлечению корня, расчёт сводится к нахождению корня степени y2 из числа x в степени y1. Если значение y2 чётное, то дробную степень можно вычислить только при положительном основании, так как корень отрицательного числа не существует и калькулятор в подобной ситуации выдаст вам ошибку!

При возведении в дробную степень не забывайте закрывать основание в скобки, иначе знаменатель дроби в показателе степени уйдет в знаменатель основания!

Этот пример показывает, как возвести в дробную степень на калькуляторе:

Наш онлайн калькулятор позволяет возвести как в положительную, так и в отрицательную степень. При отрицательном значении показателя, основание должно принять вид (1/x), другими словами, числитель и знаменатель основания степени должны поменяться местами и только после этого можно начинать возведение. Калькулятор позволяет возвести число в отрицательную степень автоматически, опуская все промежуточные преобразования и выдавая сразу окончательный ответ.

При возведении в отрицательную степень всевозможных функций, в том числе тригонометрических, онлайн калькулятор автоматически учитывает их четность/нечетность по правилу знаков.

Этот пример показывает, как возвести в отрицательную степень на калькуляторе:

Дробное число в степени калькулятор тоже рассчитает.

Возведение дроби в степень с помощью калькулятора:

Возведение корня в степень с помощью калькулятора:

Все функции нашего бесплатного калькулятора собраны в одном разделе.

Возведение в степень онлайн was last modified: Март 3rd, 2016 by Admin

константам условной компиляции . Он разрешает определять константы, используемые позже в методе условной печати WriteIf классов Debug и Trace . Мощь этого механизма в том, что константы можно менять в файле конфигурации проекта, не изменяя код проекта и не требуя его перекомпиляции.

Отладка и инструментальная среда Visual Studio .Net

Инструментальная среда студии предоставляет программисту самый широкий спектр возможностей слежения за ходом вычислений и отслеживания состояний, в котором находится процесс вычислений. Поскольку все современные инструментальные среды организованы сходным образом и хорошо известны работающим программистам, я позволю себе не останавливаться на описании возможностей среды.

Обработка исключительных ситуаций

Какой бы надежный код ни был написан, сколь бы тщательной ни была отладка , в версии, переданной в эксплуатацию и на сопровождение, при запусках будут встречаться нарушения спецификаций . Причиной этого являются выше упомянутые законы программотехники . В системе остается последняя ошибка, находятся пользователи, не знающие спецификаций , и если спецификацию можно нарушить, то это событие когда-нибудь да произойдет. В таких исключительных ситуациях продолжение выполнения программы либо становится невозможным (попытка выполнить неразрешенную операцию деления на ноль, попытки записи в защищенную область памяти, попытка открытия несуществующего файла, попытка получить несуществующую запись базы данных ), либо в возникшей ситуации применение алгоритма приведет к ошибочным результатам.

Что делать при возникновении исключительной ситуации ? Конечно, всегда есть стандартный способ - сообщить о возникшей ошибке и прервать выполнение программы. Понятно, что это приемлемо лишь для безобидных приложений; даже для компьютерных игр этот способ не годится, что уж говорить о критически важных приложениях!

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

Обработка исключений в языках C/C++

Для стиля программирования на языке C характерно описание методов класса как булевых функций, возвращающих true в случае нормального завершения метода и false - при возникновении исключительной ситуации . Вызов метода встраивался в If -оператор, обрабатывающий ошибку в случае неуспеха завершения метода:

bool MyMethod(...){...} if !MyMethod(){// обработка ошибки} {//нормальное выполнение}

Недостатки этой схемы понятны. Во-первых, мало информации о причине возникновения ошибки, поэтому либо через поля класса, либо через аргументы метода нужно передавать дополнительную информацию. Во-вторых, блок обработки встраивается в каждый вызов, что приводит к раздуванию кода.

Поэтому в C/C++ применяется схема try/catch блоков, суть которой в следующем. Участок программы, в котором может возникнуть исключительная ситуация , оформляется в виде охраняемого try-блока. Если при его выполнении возникает исключительная ситуация , то происходит прерывание выполнения try-блока c классификацией исключения. Это исключение начинает обрабатывать один из catch-блоков, соответствующий типу исключения . В C/C++ применяются две такие схемы. Одна из них - схема с возобновлением - соответствует так называемым структурным, или С-исключениям. Вторая схема - без возобновления - соответствует С++ исключениям. В первой схеме обработчик исключения - catch-блок - возвращает управление в некоторую точку try-блока. Во второй схеме управление не возвращается в try-блок.

С некоторыми синтаксическими отличиями схема с возобновлением применяется в языках VB/VBA.

Схема обработки исключений в C#

Язык C# наследовал схему исключений языка С++, внеся в нее свои коррективы. Рассмотрим схему подробнее и начнем с синтаксиса конструкции try-catch-finally :

try {...} catch (T1 e1) {...} ... catch(Tk ek) {...} finally {...}

Всюду в тексте модуля, где синтаксически допускается использование блока, этот блок можно сделать охраняемым, добавив ключевое слово try . Вслед за try-блоком могут следовать catch-блоки, называемые блоками-обработчиками исключительных ситуаций , их может быть несколько, они могут и отсутствовать. Завершает эту последовательность finally-блок - блок финализации, который также может отсутствовать. Вся эта конструкция может быть вложенной - в состав try-блока может входить конструкция try-catch-finally .

Выбрасывание исключений. Создание объектов Exception

В теле try-блока может возникнуть исключительная ситуация , приводящая к выбрасыванию исключений . Формально выбрасывание исключения происходит при выполнении оператора throw . Этот оператор, чаще всего, выполняется в недрах операционной системы, когда система команд или функция API не может сделать свою работу. Но этот оператор может быть частью программного текста try-блока и выполняться, когда в результате проведенного анализа становится понятным, что дальнейшая нормальная работа невозможна.

Синтаксически оператор throw имеет вид:

throw[выражение]

Выражение throw задает объект класса, являющегося наследником класса Exception . Обычно это выражение new , создающее новый объект. Если оно отсутствует, то повторно выбрасывается текущее исключение. Если исключение выбрасывается операционной системой, то она сама классифицирует исключение, создает объект соответствующего класса и автоматически заполняет его поля.

В рассматриваемой нами модели исключения являются объектами, класс которых представляет собой наследника класса Exception . Этот класс и многочисленные его наследники является частью библиотеки FCL, хотя и разбросаны по разным пространствам имен. Каждый класс задает определенный тип исключения в соответствии с классификацией, принятой в Framework .Net. Вот лишь некоторые классы исключений из пространства имен System : ArgumentException , ArgumentOutOfRangeException , ArithmeticException , BadImageFormatException , DivideByZeroException , OverflowException . В пространстве имен System.IO собраны классы исключений , связанных с проблемами ввода-вывода: DirectoryNotFoundException , FileNotFoundException и многие другие. Имена всех классов исключений заканчиваются словом Exception . Разрешается создавать собственные классы исключений , наследуя их от класса Exception .

При выполнении оператора throw создается объект te , класс TE которого характеризует текущее исключение, а поля содержат информацию о возникшей исключительной ситуации . Выполнение оператора throw приводит к тому, что нормальный процесс вычислений на этом прекращается. Если это происходит в охраняемом try-блоке, то начинается этап "захвата" исключения одним из обработчиков исключений.

Захват исключения

Блок catch - обработчик исключения имеет следующий синтаксис:

catch (T e) {...}

Класс T , указанный в заголовке catch -блока, должен принадлежать классам исключений . Блок catch с формальным аргументом e класса T потенциально способен захватить текущее исключение te класса TE , если и только если объект te совместим по присваиванию c объектом e. Другими словами, потенциальная способность захвата означает допустимость присваивания e = te , что возможно, когда класс TE является потомком класса T . Обработчик, класс T которого является классом Exception , является универсальным обработчиком , потенциально он способен захватить любое исключение, поскольку все они являются его потомками.

Потенциальных захватчиков может быть много, исключение захватывает лишь один - тот из них, кто стоит первым в списке проверки. Каков порядок проверки? Он довольно естественный. Вначале проверяются обработчики в порядке следования их за try -блоком, и первый потенциальный захватчик становится активным, захватывая исключение и выполняя его обработку. Отсюда становится ясно, что порядок следования в списке catch -блоков крайне важен. Первыми идут наиболее специализированные обработчики , далее по мере возрастания универсальности. Так, вначале должен идти обработчик исключения DivideByZeroException , а уже за ним - Main . Если и в ней нет потенциального захватчика исключения, то сработает стандартный обработчик, прерывающий выполнение программы с выдачей соответствующего сообщения.

Перехват исключений

Принимая во внимание, что.NET Framework включает большое количество предопределенных классов исключений, возникает вопрос: как их использовать в коде для перехвата ошибочных условий? Для того чтобы справиться с возможными ошибочными ситуациями в коде C#, программа обычно делится на блоки трех разных типов:

    Блоки try инкапсулируют код, формирующий часть нормальных действий программы, которые потенциально могут столкнуться с серьезными ошибочными ситуациями.

    Блоки catch инкапсулируют код, который обрабатывает ошибочные ситуации, происходящие в коде блока try. Это также удобное место для протоколирования ошибок.

    Блоки finally инкапсулируют код, очищающий любые ресурсы или выполняющий другие действия, которые обычно нужно выполнить в конце блоков try или catch. Важно понимать, что этот блок выполняется независимо от того, сгенерированo исключение или нет.

Try и catch

Основу обработки исключительных ситуаций в C# составляет пара ключевых слов try и catch. Эти ключевые слова действуют совместно и не могут быть использованы порознь. Ниже приведена общая форма определения блоков try/catch для обработки исключительных ситуаций:

try { // Блок кода, проверяемый на наличие ошибок. } catch (ExcepType1 exOb) { // Обработчик исключения типа ExcepType1. } catch (ExcepType2 exOb) { // Обработчик исключения типа ExcepType2. } ...

где ExcepType - это тип возникающей исключительной ситуации. Когда исключение генерируется оператором try, оно перехватывается составляющим ему пару оператором catch, который затем обрабатывает это исключение. В зависимости от типа исключения выполняется и соответствующий оператор catch. Так, если типы генерируемого исключения и того, что указывается в операторе catch, совпадают, то выполняется именно этот оператор, а все остальные пропускаются. Когда исключение перехватывается, переменная исключения exOb получает свое значение. На самом деле указывать переменную exOb необязательно. Так, ее необязательно указывать, если обработчику исключений не требуется доступ к объекту исключения, что бывает довольно часто. Для обработки исключения достаточно и его типа.

Следует, однако, иметь в виду, что если исключение не генерируется, то блок оператора try завершается как обычно, и все его операторы catch пропускаются. Выполнение программы возобновляется с первого оператора, следующего после завершающего оператора catch. Таким образом, оператор catch выполняется лишь в том случае, если генерируется исключение.

Давайте рассмотрим пример, в котором будем обрабатывать исключение, возникающее при делении числа на 0:

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static int MyDel(int x, int y) { return x / y; } static void Main() { try { Console.Write("Введите x: "); int x = int.Parse(Console.ReadLine()); Console.Write("Введите y: "); int y = int.Parse(Console.ReadLine()); int result = MyDel(x, y); Console.WriteLine("Результат: " + result); } // Обрабатываем исключение возникающее при делении на ноль catch (DivideByZeroException) { Console.WriteLine("Деление на 0 detected!!!\n"); Main(); } // Обрабатываем исключение при неккоректном вводе числа в консоль catch (FormatException) { Console.WriteLine("Это НЕ число!!!\n"); Main(); } Console.ReadLine(); } } }

Данный простой пример наглядно иллюстрирует обработку исключительной ситуации при делении на 0 (DivideByZeroException), а так же пользовательскую ошибку при вводе не числа (FormatException).

Последствия неперехвата исключений

Перехват одного из стандартных исключений, как в приведенном выше примере, дает еще одно преимущество: он исключает аварийное завершение программы. Как только исключение будет сгенерировано, оно должно быть перехвачено каким-то фрагментом кода в определенном месте программы. Вообще говоря, если исключение не перехватывается в программе, то оно будет перехвачено исполняющей системой. Но дело в том, что исполняющая система выдаст сообщение об ошибке и прервет выполнение программы.




Top