C#

Рекламный модуль
Безупречный и доступный янтарный тёплый пол заказать на сайте - Www.ekson.com.ua. | Сверхпрочная и качественная песочная купить квартиру в киеве недорогая доставка по Киеву.

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

Если вернуться к главе 2, "Типы и значения чисел .NET", и рассмотреть рис. 2.13, то можно вспомнить, как среда разработки Visual C# Express прерывает поток выполне¬ния программы в случае, когда математические операции приводили к переполнению и передаче исключения. Это подобно тому, как пилот-инструктор прерывает действия курсанта, если он де¬лает серьезную ошибку в пилотировании, и берет на себя управление самолетом, чтобы избежать аварийной ситуации. Так, в некотором смысле можно рассматривать меха¬низм обработки исключений CLR как прием инструктором управления на себя, когда что-то пошло не так и курсант не справился. При передаче исключения программа (подобно курсанту) должна быть способна к восстановлению управления. То, как вы справляетесь с исключением, определит судьбу вашей программы. В примере с ошибкой переполнения на рис. 2.13, исключе¬ние перехватывала IDE, предоставляя дружественный пользовательский интерфейс, об¬легчающий понимание. Рассмотрите исходный код, представленный на рис. 5.2, который создает исключе¬ние. Это называют передачей исключения (throwing). Если бы метод RunAll () был запущен, Visual C# Express отобразил бы сообщении об исключении, представленное на рис. 5.3 (для запуска отладчика используйте кла¬вишу ). Исключение не вызывало остановки операционной системы или среды разработки fcual C# Express, поскольку его перехватил встроенный обработчик исключений Visual Studio. Среда Visual Studio приняла управление на себя, и остановила работу только вашей программы. Вообразите, если бы среда Visual Studio не была запущена. Созданное исключе- ■ве заставило бы программу остановиться, и вы получили бы системное сообщение :" :шибке, указывающее на ошибочный объект, номер строки и стек. Большинство I :.тьзователей понятия не имели бы, что произошло и, вероятно, посчитали бы это сбо- к эмпьютера. Что вам необходимо сделать, так это перехватить (catch) и обработать исключение, гак это делала среда Visual Studio. Например, если бы вы знали, что исключение может происходить в методе RunAll (), то изменили бы его код следующим образом: :lass MyType public int DataMember; riass Tests public void GeneratesException () MyType els = null; els. DataMember = 10; :ublic void RunAll () try 1 GeneratesException(); } catch (Exception) { } } } Код, выделенный полужирным шрифтом, — это блок: исключения (exception block который перехватывает исключение и позволяет вам отреагировать на него. В этом примере, тем не менее, ничего после перехвата исключения не происходит. Если вь: запустите эту программу, то среда Visual C# Express не будет отображать сообщения об исключении, и программа продолжит работу без проблем. С точки зрения средь: Visual C# Express, все сработало нормально. Но даже несмотря на то, что программа продолжила работать, была ли устранена проблема? Уверен, вы догадались, ответ — нет. Программа поглотила исключение, ни¬как не отреагировав на проблему. Если бы мы оставили такую ситуацию в реально;: программе, то она вряд ли смогла бы претендовать на популярность у пользователей. На заметку. На практике бывают редкие ситуации, когда сообщение об ошибке следует скрыть, поскольку вы никак не можете обработать его. Это случается, когда вы имеете дело с сетевыми соединениями, операциями с базой данных или другими проблемами, находящимися вне кон¬троля вашей программы. Но в большинстве случаев поглощать исключение нельзя. Какова же реальная ситуация, в которой вы могли бы передавать исключения/ Как быть, если параметр недопустим? Как вы узнаете далее, в разделе "Фильтрация ис -ключений", именно для этой цели существует исключение типа ArgumentException ( Разработчики, получившие это исключение, сразу поймут, что они должны испра вить параметр. Это сэкономит много времени на отладку и уменьшит общее время разработки. Реальная работа по обработке исключений связана с размышлениями обо всех возможных исключениях, которые могут произойти. Но что имеет больше смысла — отслеживание причины ошибки или добавление кода, способного легче находить ошибки? В конечном счете добавление кода, отслеживающего ошибку, сэкономит вре¬мя и поможет избежать огорчений.