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

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

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

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

Теперь, когда имеется Вг изгуЕхрге з э гоп, с помощью метода Ехрге за ьоп . ЕапЬг)а<> необходимо привязать выражение (в данном случае иь1) к параметрам в списке параметров (в данном случае п). Обратите внимание, что в примере используется обобщенный метод ЕаглЬг)а<>, так что можно создать тип Ехрге аз гоп< риис< г ис, 1пс». Применение обобщенной формы предоставляет компилятору больше информации о типе, чтобы перехватывать любые возможные ошибки во время компиляции, не позволяя им нарушить работу приложения во время выполнения. Существует еще один инструмент, демонстрирующий, как выражения представляют операции в виде данных — Ехргевз!оп 'йее РеЬияйег Ъ'!зцайхег (Визуализатор отладчика деревьев выражений) в Изма) З!иб!о 2010. Если запустить предыдущий пример внутри отладчика Ч!впа) Б!пб!о РеЬпяяег, то при проходе точки, где выполняется присваивание выражения переменной ехрг, в окнах А010з (Автоматические переменные) и ~оса(в (Локальные переменные) выражение будет разобрано и отображено как ( п => (и + 1) ), несмотря на то,что оно имеет тип яузгепг.11пг(.ехргезз1опз.ехргезз1оп<яузгеп.

Риис<зле, 1пг». Это замечательное подспорье при создании сложных деревьев выражений. 512 Глава 15 Нв заметку! Если бы применялась необобщенная версия метода Ехргезз1оп. ЬаюЬ<(а, то е результате получился бы экземпляр ЬатЬбаехргезэ1оп, а не ехргезз1оп. Тип ьаиЬбаЕхргез з1оп также реализует метод согар11е, однако вместо строго типизированного делегата он возвращает экземпляр типа Ое1еоасе.

Г)режде можно будет обратиться к зкзеыппяйу Ое1епаге, ЕГО ПОтрвбуется привести к определенному типу делегата, е данном случае Рспс<1пс, 1пс> ипи другой делегат с той же сигнатурой, либо же вызвать Оупат1с1пчо)се на делегате. Любой из этих способов может привести к исключению ео время выполнения, если обнаружится несоответствие между выражением и типом делегата, который, по идее, оно должно генерировать. Операции над выражениями Теперь рассмотрим пример того, как взять дерево выражений, сгенерированное из лямбда-выражеиия, и модифицировать его для создания нового дерева выражений.

В данном случае выражение (и+1) будет превращено в 2* (и+1): из1по Бузгесю сзгпс Бузгеи.ьгпог пз1пд Бузгев.Ь1по.кхргезз1опэ; рсгугс с1азз ЕпСгурогпС зСаС1с чо1б Иагп() ( Ехргеаз1оп<гипс<1пС,1пС» ехрг = и => и+1; уу Теперь присвоить ехрг значение исходного выражения, умноженное на 2. ехрг = Ехргееезоп<вппс<1пС,1пс».Ьэввс)а<вппс<1пс,1пк»( Ехргееевоп.ип1СЕР1у( ехрг.иог)у, Ехргевехо~.Сопэсапс(2) ], ехрг.вагэвесегз ); Рипс<1пг, Ьпг> Синс = ехрг.Соир11е() Сот( 1пг 1 = Ог 1 < 10; ++1 ) ( Сопзо1е.нгггеЬЬпе( Сспс(1) ) ) Выделенные полужирным строки показывают этап, когда исходное лямбда-выражение умножается иа 2. Очень важно отметить, что параметры, переданные методу ьагаЬба<> (во втором параметре). должны быть именно теми же экземплярами параметров, которые поступили из исходного выражения, те.

ехрг. Рагатегегз. Это — обязательное условие. Методу ьаиЬба<> нельзя передавать новый экземпляр Рагаиесегехргеззуоп, иначе во время выполнения возникнет исключение, подобное описанному ниже, поскольку новый экземпляр Раг ауге СЕхрге з згоп, даже имея то же самое имя, иа самом деле является совершенно другим экземпляром параметра. Бузгет.1пча1сйОрегаССопЕхсерггоп: ЬатЬба Рагатегег поС Ьп эсере БуаСеп.1пча11бОрегагуопЕхсерСЬоп: Лямбда-параметр не находится н области определения Существует много классов, унаследованных от класса Ехргезз).оп,и много статических методов создания его экземпляров и комбинации с другими выражениями.

Все оии здесь описываться ие будут. Мельчайшие подробности о пространстве имен Бузгеи.ЬЬпс).Ехргеэз1опз можно найти в документации МВО)(). Лямбда-выражения 513 Функции как данные Если ранее приходилось иметь дело с функциональными языками вроде Ызр, то легко заметить сходство между деревьями выражений и представлением функций как структур данных в Ызр н подобных ему языках. Большинство людей сталкиваются с Ызр в академической среде, и часто изучаемые ими концепции в реальном мире оказываются неприменимыми. Но перед тем как отнести деревья выражений к одному из таких академических упражнений, имеет смысл посмотреть, насколько они могут быть полезны. Как и можно было предположить, в контексте С№ деревья выражений чрезвычайно полезны, когда применяются к Ы1чЯ.

Исчерпывающее введение в язык Ыг)Я будет предложено в главе 16, а пока стоит отметить самый важный факт: Ы)яЯ предоставляет собственный для языка и выразительный синтаксис описания операций над данными, которые невозможно естественным образом смоделировать объектно-ориентированным способом. Например, можно создать выражение Ы1зЯ для поиска в большом массиве, находящемся в памяти (или другом типе 1ЕпипегаЬ1е), элементов, которые соответствуют определенному шаблону. Ы1яЯ вЂ” расширяемый язык и может предоставлять средства оперирования с другими типами хранилищ.

такими как ХМЬ и реляционные базы данных. В действительности С№ поддерживает Ы1ЧЯ 1о БЯЬ, Ы1чЯ го Па1авей Ы)нЯ 1о Епцйез, ЫХЯ 1о ХМ1. и ЬПЧЯ 1о О)э)есгз, которые все вместе позволяют выполнять операции Ы1ЧЯ на любых типах, реализующих интерфейс 16п~ппегаЬ1е. Но как деревья выражений действуют здесь7 Предположим, что реализуете Ыг)Я го БЯЬ для запроса к реляционной базе данных. Пользовательская база может находиться на другом полушарии, н выполнение простого запроса окажется слишком дорогим. К тому трудно предположить, насколько сложным будет пользовательское выражение Ыг)Я.

Естественно, необходимо приложить все усилия. чтобы обеспечить максимальную эффективность. Если выражение Ыг)Я представлено в данных 1как дерево выражений), а не в коде 1Ь [как делегат), им можно оперировать, Возможно, есть алгоритм, который поможет выявить места, где должна быть проведена оптимизация, упрощающая выражение. Или, может быть, в результате анализа выражения выясняется. что все выражение может быть упаковано, отправлено по сети и полностью выполнено на стороне сервера. Деревья выражений обеспечивают эту важную возможность. По завершении операций над данными дерево выражений можно транслировать в окончательную исполняемую операцию с помощью механизма, подобного ЬаяеэбзЕхргезз1оп. Сопр11е, и затем запустить ее.

Если бы выражение изначально было доступно только в виде кода 1Ь, то гибкость была бы существенно ограничена. Теперь вы наверняка сможете должным образом оценить действительную мощь деревьев выражений С№. Полезные применения лямбда-выражений После демонстрации, как выглядят лямбда-вырэжения. давайте рассмотрим некоторые их применения. На самом деле большинство описанных ниже примеров на С» можно реализовать с использованием анонимных методов или делегатов. Но поразительно, как простое синтаксическое дополнение к языку может открыть широчайшие воэможности в плане выразительности.

514 Глава )5 Вернемся к итераторам и генераторам В нескольких местах этой книги уже было описано создание пользовательских итераторов на СВ~. Теперь давайте посмотрим, как для их создания использовать лямбдавыражения. Основной упор будет сделан на способе реализации алгоритма в коде, в данном случае алгоритма итерации, который затем превращается в многократно используемый метод, применяемый почти в любом сценарии. На заметку! Те, кто программировал на С++ и знаком с применением стандартной библиотеки шаблонов (БТЬ), увидят в этой нотации нечто знакомое.

Большинство алгоритмов, определенных в пространстве имен з гг) в заголовочном файле <а1дотагьгп>, требуют для выполнения своей работы предоставления предикатов. Когда БТЬ впервые появилась в начале 90-х годов, она захватила сообщество программистов С++ подобно свежему бризу функционального программирования. Далее будет показано, как выполнять итерацию по обобщенному типу, который может быть или не быть коллекцией в строгом смысле этого слова. Вдобавок можно сделать внешним поведение курсора итерации, а также доступ к текущему значению коллекции.

После небольшого размышления то же самое можно сделать почти со всем из метода создания пользовательского итератора, включая тип хранятцихся элементов, тип курсора, начальное состояние курсора, конечное его состояние и способ его продвижения. Все это демонстрируется в следующем примере, где производится проход по диагонали двумерного массива: из1пс Зузтевн сзтпд Яузтегв.11пцг пз[пд Яузтегч.СЬ11ест1опз.сепет1с; рпЬ11с зтатас с1азз 1тегатогЕхтепзтопз ( рпь1тс зтаттс 1еппветаь1е<т1геп> МахеСизтот1тетатот<ТСо11естгоп, ТСигзог, Т1тев>( ГЬтз ТСс11ест1оп со11ест1оп, ТСсгзог спгзог Еипс<ТСо11ест1оп, ТСпгзог, ТТтеа> Оетссггепт, Рппс<тсогзог, Ьоо1> 1зутптзпес), Еспс<тситзог, ТСитзот> ас)чапсеспгзог) ( нЬ11е( !1зу101зпег)(спгзог) ) ( у1е1г) тегптп сетспггепт( со11ест1оп, спгзог ); ситзот = адчапсеситзот( сигает ) ) ) риЬ11с с1азз Ттегатогххавр1е ( зтаттс чогб Ма[и() ( чзт ватг1х = пен Егзт<егзт<поиЬ1е» ( пен Етзт<аоиб[е> ( 1.0, 1.1, 1.2 ), пеи Е[зг<бопЬ1е> ( 2.0, 2.1, 2.2 пен 11зт<пспЬ1е> ( 3.0, 3.1, 3.2 ) )г чаг авек настах.иа)теСизсоятеегасог( пеи хпс[] ( О, О ), В главе 9 ктераторы представлены через оператор уте1с), а в разделе "Заимствование из функционального программирования" главы ! 4 рассматриваются пользовательские итераторы.

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

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