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

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

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

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

евр1оуеев.лк(г(( пеи Евр1оуее() )х ) риЬ1гс ХотнуотсеЕпиветакот оеккпивегаког О ( теиигп пен ХогнгогсеЕпивегатог( евр1оуеея )х 1Епиветатог 1ЕпивегаЬ1е.оеикпивегаиог О ( геката пеи Иотхгогсекпивегаиог( евр1оуеез ); рг1иате Лтгауь№зт евр1оуеев; риЫга с1аяя Епкгурогп ( ятас1с тогб Ма1п О Иогкгогсе зкаГГ = пеи Хогнгогае(); Гогеаап( Евр1оуее евр гп ятагг ) ( евр.Ета1иаке(); ) Обратите внимание в этом примере, что безтиповые версии методов интерфейса реализуются явно.

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

462 Глава(3 типизированные версии и использует их. Настоятельно рекомендуется пройтись отладчиком по этому коду, чтобы увидеть его в действии. Фактически, эти типы даже не обязаны реализовывать интерфейсы, которые они реаливуют, а именно — 1епимегаЫе и 1Епииегагог. Можно закомментировать имена интерфейсов и просто реализовать методы с сигнатурвми, которые соответствуют сигнатурам в этих интерфейсах. К тому же можно заметно увеличить эффективность кода за счет использования обобщений, о которых речь шла в главе 11. Давайте внимательней присмотримся к циклу Еогеасп, сгенерированному компилятором, чтобы лучше понять, о какого рода эффективности идет речь.

В следующем коде удалены строго типизированные версии методов интерфейса и, как ожидалось, с внешней точки зрения пример работает так же, как и раньше: ияспо Еуягегц ивану Еуясеи.со11есгсопя1 риЫЕс с1аяя Етр1оуее ( риЬ11с чоьб Еча1иаге () Сопяо1е.Игаге)ьпе( "Проверка Еер1оуее..." )1 ) риЫЕс с1аяя ИогкрогсеЕпииегягог : 1Епиеегагог ( риЬ11с Иогхуогсехпитегагог( Аггауыяг етр1оуеея ) Спая.епитегасог = еир1оуеея.пеСЕпиеегагог()~ ) роЫхс оЬбесС Свггапе ( чес ( гегигп епиеегагог.сиггепг; ) риЫ1с Ьоо1 Мочекехг() ( гегигп епииегаСог.ноченехг(); ) риЫас чоха Веяег() ( епивегвгог.кеяег()) ) ргачаге 1Епииегагог епииегагог; ) риЬ11с с1аяя Иогкрогсе: 1ЕпииегяЫе ( риЬ11с Иогкрогсе() ( еир1оуеез = пеи АггауЬЕяг(); // Добавить сотрудника в целях демонстрации.

еир1оуеея.Аоб( пен Етр1оуее() )1 ) риЬ1хо Ххпивагаеог Паехпииагавог () гегигп пен Иогкрогсехпитегзгог( еер1оуеея ); ) рггчвге Аггауььяг еер1оуеея; ) риЫЕс с1аяя Епггуроапг ( згаг1с чосб Маап() ( Иогврогсе агаву = пеи Иогкуогсе(); Еогеась( Еар1оуее еер Еп ягавг ) ( еар.Ечв1иаге(); ! ) ) Я поисках канонических форм С№ 463 Конечно, сгенерированный код 1Ь не настолько эффективен.

Чтобы оценить выигрыш эффективности в цикле гогеасП, понадобится загрузить скомпилированные версии каждого примера в !ЬОАЗМ и открыть П код метода Маап, В результате можно увидеть, что слабо типизированный пример содержит дополнительные инструкции с аз Гс1а аз, которых нет в строго типизированном примере. Для тестирования производительности цикл гогеасП был запущен 20 000 000 раз. Типизированная версия пере- числителя оказалась на 1бяв быстрее нетипизированной.

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

Если параметр относится к типу значений и передан беэ ключевого слова гег, то метод принимает копию параметра, и есть гарантия, что исходное значение не модифицируется. Однако для ссылочных типов все намного слояснее, поскольку копируются только ссылки, а не объекты, на которые они ссылаются. На заметку! Если вы пришли из мира С++, то знаете, что неизменяемость реализуется ключевым словом сонэк.

Следование этой технике означает соблюдение "константности". Даже если превосходство С++ кажется неоспоримым тем, кто жалуется на отсутствие попас в С№, следует вспомнить, что в Сят несложно избавиться от требования константности с помощью сопзг сазс. Таким образом, реализация неизменяемости в С№ на самом деле превосходит возможности ключевого слова сопзг в Ст~, поскольку ее нельзя просто отбросить. Эамечательным примером неизменяемого класса в стандартной библиотеке является Бузгещ. Ягг1пд. После создания объект Бсг№пд изменить уже невозможно. Обойти это ограничение тоже никак нельзя; так уж спроектирован этот класс. Можно создавать копии, и эти копии могут быть модифицированной формой оригинала.

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

Давайте предположим на минуту, что яузгещ. Бсг1пд является изменяемым, и написан примерно такой метод: роо11с чо1О Рггптэсг1пд( экггпд Гнеэсгкпд ) ( // Предположим, что следующая строка не создает новый // экземпляр Ясг1пд, а модифицирует Гьезсг1пд. Гнезгггпд я ": эта строка печатается('Ч Сопзо1е.нгасеь1пе( Снеэсгзпд ); Представьэе себе испуг того, кто вызвал этот метод, когда после вызова обнаруживается, что к строке добавлен новый кусок.

Именно это бы и произошло, будь Бузсещ. ятг1пд изменяемым. Как видите, неизменяемость яузсещ. Бсг1пд имеет свои причины и, возможно, данную концепцию имеет смысл использовать и в собственном дизайне. 464 Глава (3 Существует много способов решения проблемы константных параметров СФ для объектов, которые должны быть изменяемыми. Если необходимо, чтобы клиенты могли передавать константную версию объекта в качестве параметра, то одно общее решение предусматривает создание для каждого изменяемого класса двух новых классов. Для примера вернемся к ранее показанному классу Совр1ехкивЬег. Будучи реализованным как объект, а не как тип значения, этот класс является блестящим кандидатом стать неизменяемым подобно зсг1по.

В этом случае такие операции, как совр1ех)(ивЬег.йип(, должны были бы создавать новый экземпляр совр1ехнивьег вместо того, чтобы модифицировать объект, на который указывает ссылка ЬЫя. Но давайте посмотрим, что можно сделать для того. чтобы позволить совр1ехнивЬе г быть изменяемым. Можно открыть доступ к вещественной и мнимой частям через свойства, допускающие чтение и запись. Но каким образом передать объект методу и не допустить, чтобы метод изменил этот объект с помощью средства яес одного из свойству Одно из решений, как принято в объектно-ориентированном программировании, заключается во введении нового класса. Рассмотрим следующий код; ия1по Яуясев; риЬ11с яея1еп( с1зяя Совр1ехкивЬег ( риЫ1с Совр1ехкивЬег( ооиЫе геа1, ооиЬ1е авяд1ппгу ) ( ГЫя.геа1 = геа1) ГЫя.мпадгпягу = 1впвапагу; ) риЬ1гс ооиЬ1е Кеп1 ( иес ( гесигп геа1; ) яеп ( гея1 = чя1ие> ) ) риЬ1гс п)оиЫе 1вао1пягу оеп ( гесигп 1вяо1ппгу; ! яег ( авадгпягу = чя1ие; // Прочие методы опущены для ясности.

рг1чпсе СоиЬ1е гея11 рггчаге ооиЫе 1вяи1ппгу; ) риЬ1гс яея1еп( с1яяя Сопяссовр1ехнивЬег ( риЫас Сопяссовр1ехкивЬег( Совр1ехнивЬег рьвр1 ) ( ГЫя.р1вр1 = рьвр1; ) риЬ11с п(оиЫе Кея1 ( Пес гепигп р1вр1.аея1; ) ) риЬ1гс п(оиЫе 1вяд1пягу ( иеп ( 8 поисках канонических форм Са 465 гесигп р1вр1.1васапагу; ) ) ргаиасе геак)оп1у Совр1ехкивпег рхвр1; ) рива!с зез1еи с1азз Епсгуеоапк ( зсасас ио1д Иа1п () ( Совр1ехкивЬег зовенивЬег = пен Совр1ехкивЬег( 1, 2 ); Яовекеспок(( пен Сопессовр1ехнивЬег(зовенивсег) ); // Контракт Сопзссовр1ехкивЬег гарантирует // в этой точке неизменяемость зовенивЬег. ) зсас1с иоки Бовемегпод( Сопзссовр1ехяивЬег пивЬег ) ( Сопзо1е.кг1се11пе( "( (0), (1) )", пивЬег.аез1, пивЬег.1васапзгу )) Обратите внимание, на добавление промежуточного класса по имени СопзССовр1ех МивЬег.

Когда метод желает принять объект Совр1ехкивЬег и при этом гарантировать неизменяемость параметра, он принимает С о па ГС овр1ехкивЬе г вместо С оп1р1ехнивЬег. Конечно, в случае Совр1ехнивЬег лучшим решением было бы сделать его сразу неизменяемым в. Применения подобной техники для гарантирования невозможности изменения параметра методом могут потребовать и намного более сложные классы, чем Совр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 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7054
Авторов
на СтудИзбе
259
Средний доход
с одного платного файла
Обучение Подробнее