Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 51

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 51 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 512019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 51)

Независимо от того, существует или нет подходящий блок сагсЬ, если предусмотрен блок 11па11у, он всегда выполняется. независимо от того, как поток управления покидает блок Гг у. Рассмотрим пример оператора Г ту в СЗ: пятна Яуясело пягпч Яуясею.Со11есггогяс пятна Яуясею.кппс1юе.Союр11егЯегч1сея; с'! Отключить предупреждение компилятора: СЯ1058 [аяяеюЬ1ус НппсгюеСоюраГЬЬ111пу(ХгарнопЕхсерс1огтлгоня = га1яе)) рпЬ11с с1аяя Епсгуро1пс ( ясастс чогб Магг. () ( ггу ( Аггауввяс 11яп = пен АггауЬЬяп(); 11яп.лсЫ( 1 ); Согяо1е.нггсеЬгпе( "Элемент 10 = (О)", 11яп[10) ); ) сассЬ( АгчпюепсбппбткапсеЕхсерсгоп х ) Сопяо1е.кг1пеЬ1пе( "=== Обработчик АгчпюепсоппогкапчеЕхсерс1опГЕ Сопяо1е.нггсеввпе( х ); Сопяо1е.кгггеввпе( "=== Обработчик АгчпюепсопГОЙНагдеЕхсерстоп"а ): ) сассЬ( Ехсерсгоп х ) [ Сопяо1е.нг1гепвпе( "=== Обработчик исключения ===" )с Сопяо1е.кг11еьгпе( х ); Сопяо1е.кгтсеЬ1пе( "=== Обработчик исключения ===1пссп" ) ) сагсЬ ( Сопяо1е.Хггпевтпе( "=== Необработанное исключение" т " Напс)1ег ===" )с Сопяо1е.нг1сеЬгпе( "Исключение, которое не" " ожидалось..." ); Сопяо1е.кг1севтпе( "=== Необработанное исключение" + " Напс)1ег ===" )' ) 11па11у ( Сопяо1е.кггсеЬ1пе( "Очистка..." )с ) ) Код внутри блока г ту предназначен для генерации исключения Агдпюеп ГОпГОгкапое Ехсерс1оп.

Как только исключение сгенерировано, исполняющая система начинает поиск подходящей конструкции сассЬ. являющейся частью этого оператора Ггу и максимально соответствующей типу исключения. Ясно, что лучше всего подходит первая конструкция сагсЬ. Поэтому исполняющая система немедленно начинает выполнение операторов из первого блока сагсЬ. Если действительное содержимое исключения не интересует, объявление переменной исключения х в конструкции сассЬ можно опус- Безопасность и обработка исключений 193 тить и ограничится объявлением типа.

Но в данном случае требовалось продемонстрировать, что объекты исключения в С№ создают наглядную трассировку стека, а также другие данные, которые могут пригодиться при отладке. Для генерации вывода в настоящей главе примеры компилировались с отключенной отладочной информацией. Включив ее, можно будет заметить. что в трассировке стека также указаны имена файлов и номера строк кода на различных уровнях стека. Вторая конструкция са«сп будет перехватывать исключения общего типа Ехсер«уоп. Если код в блоке «гу сгенерирует исключение, производное от Яуз«еж. Ехсер«ьоп и отличающееся от Агццюеп«00«О«капцеЕхсер«топ, то этот второй блок са«сЬ обработает его.

В С№ множественные конструкции са«сп, ассоциированные с одним блоком «гу, должны следовать в таком порядке, чтобы наиболее специфичные исключения обрабатывались первыми. Код, в котором общие конструкции са«сЬ предшествуют более специфичным, просто не скомпилируется. В этом легко убедиться, поменяв местами первые две конструкции са«сЬ в предыдущем примере — будет выдано следующее сообщение об ошибке: еггог 000160: А ргетгоцэ са«сп с1ацэе а1геабу са«спев а11 ехсер«1опв ог «Пьв ог о« а эцрег «уре СЯув«ею.Ехсер«1оп') оюибка ОЯО1ббг Прелылуыая конструкция са«сл уже перехватила все исключения этого типа или его супертипа ГЯуа«ею.Ехсербкоп) В С№ каждое исключение, которое можно сгенерировать. должно наследоваться от Яуз«ею.

Ехсер«а оп. Поскольку объявлена конструкция са«сЬ, специально предназначенная для исключений типа Яув«ет. Ехсер«уоп, как насчет третьей и последней конструкции са«сЬ? Несмотря на то что сгенерировать исключение типа, не унаследованного от Я уз«ею. Ехсер«ьоп. в языке С№ невозможно, это не является невозможным для среды СЬК. (Например, в языке С++ можно сгенерировать исключение любого типа.) Поэтому если написать Аггауььв«на языке, который позволяет это, может получиться, что код сгенерирует исключение не очень полезного типа, такого как Я уз«ею.

1п«32. Звучит странно, но такое возможно. В этом случае можно перехватить такое исключение в С№, применив блок са«сЬ без явного типа исключения и без переменной. К сожалению, при этом не существует простого способа узнать тип сгенерированного исключения. К тому же оператор «гу может иметь максимум одну общую конструкцию са«сЬ без аргументов. Нв заметку! Начиная с версии .НЕТ 2.0, ситуация с общими конструкциями са«сЬ стала немного отличаться от лчет 1.1, Появился новый атрибут ецп«ьтеОотра«ьь111«уА««гуьц«е, который можно присоединить к сборке.

Компиляторы С№ и Н)зцз) Ваз)с, ориентированные на .НЕТ 2.0, применяют это свойство по умолчанию. Это говорит исполняющей системе о том, что исключения, не унаследованные от Яуз«елг. ехсер«ьоп, должны быть помещены в оболочку ецп«1юеигарребехсер«1оп, которая наследуется от яуз«ею.ехсер«топ. Зто удобно, поскольку позволяет коду С№ получить доступ к сгенерированному исключению. Ранее доступ к сгенерированному исключению был невозможен, поскольку оно перехватывалось общим, лишенным параметров, блоком са«сп.

Теперь с помощью свойства ушп«1юеигарребЕхсер«1оп. Игарребехсер«уоп можно получить доступ к действительному типу сгенерированного исключения. Если код содержит блок са«сЬ без параметров, компилятор по умолчанию выдает предупреждение СЕ)058.

Вывод этого предупреждения можно отключить, как было показано з предыдущем примере. В самом конценаходится блок 11па11у. Независимо от того, как произошел выход из блока «гу — по достижении его конечной точки, через генерацию исключения или оператор ге«цге — блок «те а11у выполняется всегда. Если есть подходящий блок са«сп и блок «геа11у, ассоциированный с тем же самым блоком «гу, блок са«сп выполняется 194 Глава 7 перед блоком 11па11у. В ятом легко убедиться, взглянув на вывод предыдущего кода примера, который выглядит следующим образом: === Обработчик АгдпшепсбпсбйкапдеЕхсергвоп === яуягеш.лгдпшепгопгбгеапдеехсерсьоп: 1пбех ная опг ог тапсе.

мпяг ье поп-педасвте апд 1еяз гпап гье ятяе ов гье со11есг1оп. Рагашесег паше: Епбех Яуясеш.лгдишепссиссулапдекхсерсвоп: Выход ииаекоа За дОпуотимые пределы. коллен быть неотрицательным и меньше размера коллекции. Имя параметра: Епоех аг Яузгеш.со11есг1опз.лггауь1яг.цег Хгеш(1пгз2 Гпбех) ас Епггуро1пГ.Маьп() === Обработчик АгдпшепсопсбйкапдеЕхсергьоп === Очистка...

Повторная генерация и трансляция исключений Внутри определенного фрейма стена может понадобиться перехватить все исключения или же определенное их подмножество, выполнить некоторую очистку и затем заново сгенерировать исключение, чтобы позволить ему дальше распространяться по стеку. Для реализации сказанного используется оператор СЬгон без параметров: пя1пс Яуягеен ся1пц Яузсеш.Со11есг1опз; рпвувс с1аяя Епсгуротп зсас1с то16 Ма1п() ( ггу ( ггу ( Аггау11зс 11яг = пен Аггауьвзп()) 11яс.лсЫ ( 1 )) Сопяо1е.кг1се11пе( "Элемент 10 = (О)", 11яс[10) ); сассл( АгдпшепсопгойкапцеЕхсерсвоп ) ( Сопяо1е.иг1ге11пе( "Выполнить полезную работу и" ь " повторить исключение" ); !! Заново сгенерировать перехваченное исключение. гпгон) ) 11па11у ( Сопяо1е.игвге11пе( "Очистка..." )) ) ) сассь ( Сопяо1е.кгтсе11пе( "Готово" ); ) Обратите внимание, что любые блоки 11па11у, связанные с фреймом исключения, с которым ассоциирован блок сахсп, будут выполнены перед выполнением обработчиков любых исключений более высокого уровня.

Это видно в выводе показанного выше кода: Выполнить полезную работу и повторить исключение Очистка... Готово Безопасность и обработка исключений 195 В разделе "Обеспечение нейтральности к исключениям" этой главы будут представлены некоторые приемы, которые помогут избежать перехвата исключений, выгюлнения очистки и затем повторной их генерации. Такой стиль работы довольно неуклюж, поскольку при этом требуется следить за правильной повторной генерютией исключений.

Если вдруг вы нечаянно забудете это сделать, то вряд ли справитесь с исключительной ситуацией. Продемонстрированные приемы помогуг достичь цели, когда единственным местом, где помещается блок сагсЪ, будет то, где может воаникнугь действие по исправлению ситуации. Иногда необходимо "транслировать" исключение внутри обработчика исключений. В этом случае перехватывается исключение одного типа, но затем генерируется исключение другого типа — возможно, более точного — в блоке сагсЪ для передачи его на обработку на следующем уровне. Рассмотрим приведенный ниже пример: пя1пч Буягеш; пэ1пд Бузгеш.Со11есг1опзт рпЪ11с с1аяя МуЕхсерггоп: Ехсерггоп ( рпьугс МуЕхсерг1оп( Бгггпд геаяоп, Ехсергаоп гппег ) :Ъаяе( геаяоп, копет ) ( ) ) рпЪ11с с1аяя Епггуроапг ( згаггс чогб Магп() ( ( ггу ( Аггауькэг 11яг = пен Аггауььяг()) 11яг.А<Ы( 1 ); Сопяо1е.нгггеьапе( "Элемент 10 = (О)", 11яг(10] ) сагсп( АгчпшепгбпгбтаапчеЕхсерггоп х ) ( Сопяо1е.игггеггпе( "Выполнить полезную работу и " + " повторить исключение" )т гитон пен МуЕхсергтоп( "Лучше сгенерировать исключение", х ) ) 11пэ11у ( Сопяо1е.нг1геьгпэ( "Очистка..." ); ) ) сагсп( Ехсергкоп х ) Сопзо1е.игкге11пе( х ); Сопзо1е.кгкгепьпе( "Готово" )) ) ) Одним особым качеством типа Буягеш.

Ехсерг].оп является способность включать в себя ссылку на вложенное исключение через свойство ехсергаоп. 1ппегехсергуоп. Таким образом, когда генерируется новое исключение, вы можете предохранить цепочку исключений для исключений, обрабатывающих их. Я рекомендую испольаовать ато полезное свойство стандартного типа исключений С() для трансляции ваших исключений. Вывод предыдущего кода выглядит следующим образом: 196 Глава 7 Выполнить полезную работу и повторить исключение Очистка... МуЕхсерсгоп: Лучше сгенерировать исключение †> Бузлеш.АгдишептбисблаапдеЕхсерстоп: 1пбех ная оис от галде. Мияп Ье поп-педас1че апб 1езя Спал Гпе згяе оу Гпе со11ес11оп.

Рагашетег паше: Ьпбех аг Яуяпеш.Со11есс1опя.АггауЬЬзп.деп 11еш(1пс32 Ьпбех) аг Епсгуро1пС.Ма1п() -- Епб от гппег ехсерстоп згасК Сгасе— ат Епсгуровпс.Ма1п() Бузгеш.АгдителлбиГОГВалдеЕхсерстоп: Выход индекса за пределы лналазона. Значение должно быть положительным и меньше размера коллекции. нмя параметра: улбех в Бузгеш.

со11есстоля.лггауьузг. дег 1гет (1лсз2 улбех) в Елсгуроулс.Мати Д -- Конец трассировки стека внутреннего исключения в Елсгуроглс.Матл И готово Имейте в виду,что трансляции исключений по возможности следует избегать. Чем больше исключений перехватывается и генерируется заново в стеке,тем больше код, обрабатывающий исключение, будетизолирован откода, его генерирующего. Тоестьстановится трудным сопоставить точку перехвата с исходной точкой генерации исключения. Да, свойство Ех серс г оп .

Характеристики

Тип файла
DJVU-файл
Размер
8,22 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7057
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее