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

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

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

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

Более того, СЬК откладывает доставку любых асинхронных исключений вроде тьтеабАЬоттехсерт1оп на время выполнения кода СЕЯ. Работа с СЕК осуществляется с использованием класса нилт1лсене1ретз из пространства имен Еузтелс. Нпат1лсе. Сослр11етзето1сез. Чтобы создать СЕЯ, просто вызовите НопгвнеНе1ретз.РтератеСопзттз1пебкес11опэ перед оператором тту. СЬК затем проверит блоки сатсь/т1пз11у и подготовит их,пройдя по графу вызовов, чтобы убедиться, что все вызываемые в нем методы уже ЛТ-скомпилированы и необходимое пространство стека доступноз.

несмотря на то что Ртератесопзттз1песыеа1опз выэывает- Кстати, с виртуальными методами н делегатами связана проблема, поскольку граф вызовов не может нх учесть во время подготовки. Однако если цель виртуального метода или делегата известна, то его можно подготовить явно, вызвав для этого киаттвене1ретз. Ргератеое1едзте.

Рекомендуется почитать статью стивена тоуба (Бсерьеп топь)кеер уоиг Сабе йишбгса юсГА Гле НейаЬИЯу Рзагигез об" псе .ИЕТ РтатешогЬ [Сохраняйте работоспособность своего кода с помощью средств повышения надежности .НЕТ Ргагпеаог1с), доступную по адресу Ьттрс!свзбэ.этстозотт.сот/взбовад/1ззиез/05/10/Ке11зЬ111су!бетасс1т.азрх. Безопасность и обработка исключений 207 ся до оператора ггу, действительный код внутри блока ггу нс подготовлен. Позтому для подготовки произвольных участком вода, упаковывая их в блок Е).па11у внутри СЕВ, можно использовать следующий подход: Випс1шене1регя.ргерагесопясгагпебаес1опя(); Ггу () Егпа11у ( // здесь должен быть помешен критичный код ) Давайте посмотрим, как можно модифицировать предыдущий пример с использованием СЕВ, чтобы сделать его еще более надежным: Буясеш.Со11ессгопят Зувсеш.килийае.бтявр11егвегчзсев) Зувзеп.кипеззм.Солеига1пебкхесизаолт Ешр1оуее Ешр1оуеерасабазе рсЬ11с чотб ТегшгпасеЕшр1оуее( 1пс 1пбех ) ( // Клонировать важные объекты.

Аггауьгвс ГешрАссунеЕшр1оуеея = (Аггауьгвс) ассгчеЕшр1оуеея.С1опе(); Аггаухгвг гешртегш1пагебешр1оуеея = (йггауХ1яг) гегшгпагебЕшр1оуеев.С1опе()т ) ) [Ве11аЬ111иусолсгаси( Сопеавсепсу.И111иоссоггиревааее, Сег.виславе )) чоки ХавГБнар( гег Аггаупазс 11гзс, гег йггауьгзс зесспб, гег АггауХгвс Гешр ) ( гешр = 11гзст Еггвс = зесопбт весопб = гешр; Гвшр = пи11т ) рггчасе АггауХ1яс ассанекшр1оуееят рггчаге Аггаух1вг гегшгпагебешр1оуееят пвгпс ивапй ив1пд с1аяз ( с1аяя ( // Выполнить действия над временными объектами. оЬ)есс ешр1оуее = ГешрйссгчеЕшр1оуеев[гпбех); Гешрйссгнекшр1оуеев.кешочеАГ( 1пбех )т ГешртегшгпасебЕшр1оуеея.Абб( ешр1оуее ); ВипШпеке1регв.ргерагесопаега1пебке()1олз Ц ) Игу () Еала11у ( // Зафиксировать изменения. йггауХ1яс Гешрзрасе = пс11; Хгясзнар( гег ассгнеЕшр1оуеев, гег ГешрйссгнеЕшр1оуеез, гег Гешрзрасе ); хазгзнар( гее гегшгпагебешр1оуеев, гег ГешртегшгпасебЕшр1оуеея, гег ГешрБрасе )т 208 Глава 7 Обратите внимание, что раздел фиксации в методе Тегю1пзтеБюр1оуее упакован в СЕК.

Во время выполнения, прежде чем запустить этот код. среда СЬК подготовит его. также подготавливая метод 11зсзнар и убедившись, что стек может обслужить эту работу. Конечно, такая подготовительная операция может потерпеть неудачу, и это нормально, поскольку на этот момент еще не началось выполнение кода, фиксирующего изменения. Обратите внимание на добавление Ке11аЬ111гуСопсгасСАГГгТЬоте к методу 11згзнар, Этот атрибут информирует исполняющую систему, какого рода гарантии предоставляет метод Ьузгзнар, чтобы правильно сформировать СЕК. Атрибут Ае11аЬ111гуСопсгасСАССгТЬпге можно также присоединить и к методу Теги1пагеЕюр1оуее, но это полезно только для кода, выполняемого внутри СЕК. Если хотите снабдить этим атрибутом метод тегю1пасекюр1оуее, чтобы его можно было вызывать внутри СЕК, определенного где-либо, добавьте упомянутый атрибут светлеющим образом; 1ке11аЬ111гусопсгасс(Сопз1эпепсу.н111нсгсоггсрпзгасе, Сег.Мауга1111 Атрибут Ае11аь111сусопггасгАсггзьссе выражает основную цель, которая ставится перед ТегтупасеЕвр1оуее.

Поскольку Сопзпзгепсу установлено в Сопзузкевсу. И111МЬЬСоггирСЯГаге. то несмотря на то, что сбой может произойти, состояние системы не будет повреждено. К другим значениям, которые можно указать, относятся сопзузсетсу.маусоггсргРгосезз, сопзузсетсу.маусоггкргАРРОоюа1п и Сопзтзсегпсу.науСоггиргтпзгапсе. Имена констант говорят сами за себя, а дополнительную информацию можно получить в документации МБОХ, но для более устойчивого программного обеспечения очевидно, что предпочтение будет отдано контракту надежности Сопэ1згексу.и111МЬССоггпрГБСасе.

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

исходящих от виртуальной исполняющей системы и находящихся вне вашего влияния. Чтобы указать, что объект имеет критичный финализатор, просто унаследуйте его от Сгзсуса1РТпа11кегОЬ1есс. Поступив так, вы гарантируете объекту наличие критичного финализатора, выполняющегося в контексте СЕК и потому подчиняющегося всем правилам, налагаемым СЕК.

Вдобавок СЬК будет выполнять критичные финализаторы после завершения работы с остальными некритичными финализируемыми объектами. В действительности необходимость в создании критично финализируемого объекта возникает редко. Объекты с критичными финализаторами чаще всего используются в функционально совместимом коде. Требуемое поведение можно получить за счет наследования от Багеизпг11е, танках часто в конечном итоге производится привязка к обработчикам в этом коде. Класс ЯагеНзпп1е — это важнейший инструмент при создании "родного" функционально совместимого кода через Р/1ппоке или СОМ, поскольку поаволяет гарантировать, что не произойдет никаких утечек ресурсов внутри С1.К. До появления .ХЕТ 2.0 это было невозможно.

Во времена .НЕТ 1. 1 обычно нужно было представлять непрозрачный тип "родного" дескриптора посредством управляемого типа 1пСРгг. Это работало неплохо, если не учитывать то, что не гарантировалась очистка Безопасность и обработка исключений 209 лежащего в основе ресурса в случае возникновения асинхронного исключения, такого как ТЬгеаг)ЛЬогСЕхсерс1оп. Как обычно, добавление в .)НЕТ 2 О дополнительного уровня посредничества в форме Я а Ген апг(1е позволило смягчить остроту этой проблемы. Внимание! Прежде чем принять решение о создании наследника БауеНапг(1е, поищите среди наследников БауеНапс(1е, определенных в,НЕТ Ргагпеаогх — нет ли там подходящего. Например, если разрабатывается код для прямого обращения к драйверу устройства вызовом у(лп32-функции Оеч1се1осопсго1 через Рг)пуске, то типа Ба1енапс(1е будет вполне достаточно для хранения дескриптора, с помощью которого открывается драйвер напрямую.

При создании собственного класса-наследника Яагенапс(1е должна быть выполнена короткая последовательность шагов. В качестве примера давайте создадим производный от Багенапг(1е класс — ЯагеВ1цегооГЬНаг(1оукпг(напк(1е, чтобы можно было перечислить подключенные к системе устройства В!це(оойи если таковые есть. Шаблон перечисления устройств В)пе!оо!Ь в "родном" коде довольно прост и распространен в %г!п32 АР!. ддя этого вызывается Ту(п32-функция В1цессоГЬГТЬСГ1гзснаНЬо, которая в случае успеха возвращает дескриптор первого устройства через выходной параметр и дескриптор перечисления — через возвращаемое значение.

Затем можно получить любое дополнительное устройство вызовом Ж1п32-функции В1иесооГЬГ1пг(нехСНаого, передав ей дескриптор перечисления из функции В1песооГЬГЬЬСГТгзсваНТо. По завершении работы потребуется вызвать ЪУ(п32-функцию В1песоосЬГ1пс(Наг(гоС1озе на дескрипторе перечисления.

Рассмотрим приведенный ниже код: сз1пс Яузгеаг из!по Яузкеа.яцпс1пте.1псегорЯегч1сез; из1пс Яуэсем.яцпс)ае.Сопзгга(пеНЕхесиГЬоп; цэ1по Яузгеа.зессг(су; из!по Яузгеа.зеспг1су.Рега1ээ1опз; из1п() Яузгеа.техс! пзтпч М1сгозогг.и1п32.5агенапо1ез) г'г' Соответствует ВЬОЕТООТН Г1НО ВАО10 РЛНЛМЯ иэ И1п32 // (яггсссьауогс( ьауосгк1пс.Бечпепс1а1 )) с1азз В1сесооГЬГЬпоааСЬЬРагааз рцЬ1гс В1пегооГЬГгпона61оРагааз() ( Йн51хе = 4) ) рпЬ11с 01пс32 СнЯТге; ) !/ Соответствует ВЬОЕТООТН ЕЛО!0 1НГО нэ Иьп32 I! (ЯггпсГЬауосс( ЬауопГКгпо.зецпепг1а1, Спагзег = СЬагзеГ.Опгсот)е )) эсгссс В1иесоосннаг(готпго ( рсв11с сопзг 1пс ВЬЯЕТООТН МАХ МАМЕ 512Е = 248) рцЬ11с 01пг32 Йн51зе; риЬ1хс 01пг64 ааогеззг Авторитетный специалист по Сч+ Эндрю Кениг (Апогея Коешл) любит называть зто фундаментальной теоремой разработки программного обеспечения, т.е.

любая проблема может быть решена добавлением уровня посредничества. 210 Глава / [Магзна1ля( Опюападебтуре.нууа1ТБтт, Бггесопвт = ВЬБЕтоотН МЛХ МЛМЕ БТЕЕ )) роЫгс звЫпд ягнател рпЬ11с 01пт32 о101аяяотреч1се) роЪ1гс 01пт16 1юрБоЬчетвгоп; роЬ1гс 01пт16 иапогастогег; ) // // Безопасный обработчик перечисления устройств В1оетоотЬ // ]Бесог'турегигввтоп( Бесоптулст1оп.беиапб, Опюападебсобе = тгое )] веа1еб роЫгс с1аяя БагеВ1петоотЬНабторгпоНапб1е БагеНапб1егетобгнгповбпе1я1пча11б ( ртучате БагеВ1оегоотнмаб1оугпбНапб1е() : Ьаве( ттое ) ( ) очегтгбе рготестеб Ьоо1 Не1еаяеНапб1е() ( гетогп В1петоотпргпбНабгоС1озе( Ьапб1е ); ) (0111аротт( "1тргорз.ср1" )] (Не11аЫ11туСоптгаст( Сопз1втепсу.м111моГСоггортгтате, Сег.Боссевв )] (БпрртеявнптападебСобеБесогтту] рггчате втат1с ехтегп Ьоо1 В1оетоотнр1пбНаб1оС1ове(1птртг Ьргпб ); роЫтс с1авв ЕптгуРо1пт ( рг1чате сопят бпт ЕВРОПА БОССЕББ = 0; ятат1с чо1б Магп() ( Багер11еНапб1е габ1онапб1е) ивтпд( БатеВ1оетоотпнабторгпбНапб1е габторгпбнапб1е = В1оетоогьргпбрутзтнабго(пен В1оетоотьргпбнаогоРагаюз(), оот табгоНапб1е) ) ( 11( !табгоргпбНапб1е.1з1пча11б ) ( В1оетоотьнабго1пго габ1о1пто = пен В1оегоотьнаб1о1пто(); габ1отпто.бнгтге = 520л 01пт32 гезо1т = В1оетоотЬБетНаб1о1пго( габуоНапб1е, гег таб1о1пго ) 11( теяо1т == ЕННОН БОССЕББ ) ( // Вывести информацию на консоль.

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

Тип файла
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
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее