Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Системные исключения и их обработка
В языке С# исключение это объект класса System.Exception или производного от него класса. В пространство имен System входят кроме Exception ещё несколько классов исключений, которыми можно пользоваться в программах. В таблице 16.1 приведены исключения из пространства System, соответствующие особым ситуациям в программах на С#. Таблица 16.1. Классы системных исключений.
Исключения определены не только в пространстве имён System. В других пространствах имеются исключения, которые относятся к соответствующим разделам библиотек среды исполнения.NET. Например, в пространстве System.Drawing.Printing имеются исключения, соответствующие особым ситуациям вывода на печать и т.д. Исключение создаётся с помощью специального оператора генерации (посылки) исключения: throw выражение; Однако этот оператор будет нами рассмотрен позже. Гораздо важнее сейчас научиться распознавать появление исключений и обрабатывать эти исключения. Дело в том, что при выявлении особых ситуаций, методы библиотечных классов, которыми мы уже пользуемся в программах, посылают исключения, и нужно уметь их распознавать и обрабатывать. Достаточно часто начинающий программист наталкивается на исключения, возникающие из-за неверного ввода данных при выполнении совершенно правильной программы. В качестве примера рассмотрим такой фрагмент кода (программа 16_01.cs): double x; Console.Write(" x = "); x = double.Parse(Console.ReadLine()); Console.WriteLine(" res = " + x); Если пользователь в ответ на приглашение " x=" введёт, например, 3.3, то есть допустит ошибку, отделив дробную часть вещественного числа не запятой, а точкой, или введёт вместо цифры букву, то программа завершится аварийно и выдаст такое сообщение о необработанном исключении: Необработанное исключение: System.FormatException: Входная строка имела неверный формат, в System.Double.Parse(String s) В этом сообщении об исключении указано, что его источник – метод System.Double.Parse(String s). Для перехвата и обработки исключений используется конструкция, называемая блоком try/catch. Она состоит из двух частей. Первая часть – блок контроля за возникновением исключений – представляет собой заключённую в фигурные скобки последовательность операторов языка С#. Перед открывающейся фигурной скобкой размещается служебное слово try. Непосредственно за фигурной скобкой, закрывающей блок контроля за исключениями, размещается последовательность ловушек (иначе называемых обработчиками) исключений, а также необязательный блок завершения (finally-блок). Каждый обработчик исключений вводится служебным словом catch. Имеется три формы catch-инструкции: catch (тип_исключения имя) {операторы} catch (тип_исключения) {операторы} catch {операторы} Входящий в catch-инструкцию блок операторов предназначен для выполнения действий по обработке полученного исключения. Блок завершения имеет такой формат: finally {операторы} Операторы блока завершения выполняются в конце обработки каждого исключения. Точнее, блок finally выполняется всегда независимо от того, как поток управления покидает блок try. В стандарте языка С# конструкция try/catch/finally называется оператором try. Определены три формы оператора try: ■ блок контроля, за которым следуют catch-обработчики (один или несколько); ■ блок контроля, за которым следует блок завершения (finally-блок); ■ блок контроля, за которым следуют catch-обработчики (один или несколько), за которыми размещён блок завершения (finally-блок). В качестве примера применения конструкции try/catch дополним приведённую выше программу, которая аварийно завершается при неверно введённых данных, средствами для обработки исключений типа System.FormatException. Фрагмент кода станет таким: double x; while (true) { try { Console.Write(" x = "); x = double.Parse(Console.ReadLine()); Console.WriteLine(" res = " + x); } catch (FormatException) { Console.WriteLine(" Ошибка в формате данных! "); continue; } break; } В программу добавлен цикл, выход из которого возможен только при достижении конца тела цикла, где находится оператор break. В теле цикла – блок контроля за возникновением исключений, где размещены три оператора: Console.Write(" x = "); x = double.Parse(Console.ReadLine()); Console.WriteLine(" res = " + x); Во втором из них возможна генерация исключения System.FormatException. Если оно появляется, то управление передаётся за пределы блока контроля (его третий оператор пропускается). Ловушка (обработчик) исключений с заголовком catch (FormatException) настроена на обработку исключений типа FormatException. В теле обработчика два оператора. Первый из них выдаёт на консоль сообщение, второй передаёт управление на начало следующей итерации цикла. Цикл не будет завершён, пока пользователь не введёт значение х без ошибок. Диалог пользователя с программой может быть, например, таким: х = 3.5< ENTER> Ошибка в формате данных! х = 3d5< ENTER> Ошибка в формате данных! х = 3, 5< ENTER> res = 3, 5 Обратите внимание, что в блоке контроля за исключениями оператор Console.WriteLine(" res=" +x); выполняется только один раз. Порядок действий по контролю за возникновением исключений и их обработкой следующий. Выполняются операторы блока контроля за исключениями. Если исключений не возникло, то все catch-обработчики пропускаются. При возникновении исключения управление незамедлительно передаётся catch-блокам. Обработчики исключений просматриваются последовательно до тех пор, пока не будет обнаружен обработчик, " настроенный" на переданное исключение. После выполнения операторов этого обработчика выполняется блок завершения (если он есть) и только затем заканчивается исполнение try-оператора. Отметим, что среди блоков обработки выполняется только один или не выполняется ни один. Обратите внимание, что обработка исключения не прекращает выполнение программы. В блоках catch могут быть запрограммированы действия по устранению причин появления исключений и программа продолжает выполняться.
|