Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 131

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 131 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 1312019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

По крайней мере одно значение является четным Массив содержит значение 3. Методы расширения, связанные с запросами, можно также использовать в самом запросе, основываясь на синтаксисе запросов, предусмотренном в СФ. И в действительности это делается очень часто. Например, метод Ачегасе () используется в приведенной ниже программе для получения последовательности, состоящей только из тех значений, которые оказываются меньше среднего всех значений в массиве. !/ Использовать метод Ачегаче(] вместе с синтаксисом запросов.

пяьпч Яуясев; пя1пч Яуягев.юпс(; с1аяя Ехснесвобя2 ( ясасьс чогб Маги() ( Глава 19. она 675 гпг() пчшя = ( 1, г, а, В, Ь, Э, |О, З, 5, т )| чаг 1свчс = Гхош п ьп пшпя 1ес х = имия.вчегаде() млеге п < х ве1есС и| сопяо1е.хг1сеььпе ("среднее значение равно " + пиша .Ачегаче () ) | Сопяо1е.нгьге("Значения меньше среднего: ")| // Выполнить запрос и вывести его результаты. Еогеась(1пС 1 ьп 1САчд) Сопяо1е.нггге(1 Сопяо1е.Хгьгесьпе() ) ) При выполнении этой программы получается следующий результат.

Среднее значение равно 5.6 Значения меньше среднего: 1 2 4 3 Обратите особое внимание в этой программе на следующий код запроса. чаг 1САчд = агом п ги пиша 1ег х = ппшя.дчегасе() идете п < х яе1есс и| Как видите, переменной х в операторе 1ес присваивается среднее всех значений в массиве пиша.

Это значение получается в результате вызова метода )(чегасе () для массива пиша. Режимы выполнения запросов: отложенный и немедленный В ).ПЩ запросы выполняются в двух разнв|х режимах: немедленном и отложенном. Как пояснялось ранее в этой главе, при формировании запроса определяется ряд правил, которые не выполняются вплоть до оператора цикла гогеас)|. Это так называемое о|лложенное выполнение.

Но если используются методы расширения, дающие результат, отличающийся от последовательности, то запрос должен быть выполнен для получения этого результата. Рассмотрим, например, метод расширения Соил С () . Для того чтобы этот метод возвратил количество элементов в последовательности, необходимо выполнить запрос, и это делается автоматически при вызове метода Соипг () . В этом случае имеет место немедленное выполнение, когда запрос выполняется автоматически для получения требуемого результата. Таким образом, запрос все равно выполняется, даже если он не ' используется явно в цикле йогеас(т. Ниже приведен простой пример программы для получения количества положительных элементов, содержащихся в последовательности.

// Использовать ревьяч немедленного выполнения запроса. ияьпс ЗуяСеш," 676 Часть!. Язык С(г пя1по Яуясеп.11пьи с1аая 1лпеосатекхес ( ягатьс коса Мати() ( спС(] попа = ( 1, -2, 3, О, -4, 3 // Сформировать запрос на получение количества /! положительных значений в массиве попа. спС 1еп = (Гсоп п ьп пппя иьесе п > О яе1есС п).СоопС(); Сопяо1е.исьтеввпе("Количество положительных значений в массиве иопя: 1еп); Эта программа дает следующий результат. Кнличество положительных значений в массиве пипа: 3 Обратите внимание на то, что цикл Тогеасй не указан в данной программе явным образом. Вместо этого запрос выполняется автоматически благодаря вызову метода расширения СоппС () . Любопытно, что запрос из приведенной выше программы можно было бы сформировать и следующим образом.

час роянопя = Гсоп п сп попа нсесе п > О яе1есС и; ьпс 1еп = рояиипя.СоопС(); // запрос выполняется здесь В данном случае метод СоппС () вызывается для переменной запроса. И в этот момент запрос выполняется для получения подсчитанного количества. К числу других методов расширения, вызывающих немедленное выполнение запроса, относятся методы ТоАгхау () и Тоьфяг () . Оба этих метода расширения определены в классе ЕпппегаЬ1е. Метод Тойггау () возвращает результаты запроса в массиве, а метод То11зС ( ) — результаты запроса в форме коллекции Ыя С. (Подробнее о коллекциях речь пойдет в главе 25.) В обоих случаях для получения результатов выполняется запрос.

Например, в следующем фрагменте кода сначала получается массив результатов, сформированных по приведенному выше запросу в переменной роянппя, а затем эти результаты выводятся на экран. ьис(] риопв = рояинп.тойгсау(); О запрос выполняется здесь Госеась(ьис 1 1п рпопя) Сопяо1е.исьте(1 т " "); Аеревья выражений Еще одним средством, связанным с Е1]ь]О, является дерево выражении, которое представляет лямбда-выражение в виде данных.

Это означает, что само лямбда-выражение Глава 19. 1)ИЯ 677 нельзя выполнить, но можно преобразовать в исполняемую форму. Деревья выражений инкапсулируются в классе Буясет. Еьпч. ехргеяягопя. ехргеяя1оп<тРе1едасе>. Они оказываются пригодными в тех случаях, когда запрос выполняется вне программы, например средствами ВО(. в базе данных.

Если запрос представлен в виде данных, то его можно преобразовать в формат, понятный для базы данных. Этот процесс выполняется, например, средствами !.!)>(О го ВО!. в интегрированной среде разработки Ияпа! 9(цг((о. Таким образом, деревья выражений способствуют поддержке в С(( различных баз данных. Для получения исполняемой формы дерева выражений. достаточно вызвать метод Соп7р11е (), определенный в классе Ехргеяягоп.

Этот метод возвращает ссылку, которая может быть присвоена делегату для последующего выполнения. А тип делегата может быть объявлен собственным или же одним из предопределенных типов делегата Гппс в пространстве имен Буягедь Две формы делегата Гппс уже упоминались ранее при рассмотрении методов запроса, но существует и другие его формы. Деревьям выражений присуще следующее существенное ограничение: они могут представлять только одиночные лямбда-выражения. С их помощью нельзя представить блочные лямбда-выражсния.

Ниже приведен пример программы, демонстрирующий конкретное применение дерева выражений. В этой программе сначала создается дерево выражений, данные которого представляют метод, определяющий, является ли одно целое число множителем другого. Затем это дерево выражений компилируется в исполняемый код. И наконец, в этой программе демонстрируется выполнение скомпилированного кода. !7 Пример простого дерева выражений.

оягпЧ Буягев) иягпЧ Буясев.Ьгпч; пя1пч Буягея.Ь1пЧ.Ехргеяягопя) с1аяя Бгвр1еяхртгее ( ягаггс чогб Маял УУ Представить лямбда-выражение в виде данных. Ехргеяягоп<гнпс<гпг, 1пг, Ьоо1» 1ягасгогехр = (и, о) => (с != 0) ? (и ъ о) == 0 : га1яе) // Скомпилировать данные выражения в исполняемый код. Гнпс<гпс, гпс, Ьоо1> 1яГассог = 1вгассогЕхр.Сотр11е()7 // Выполнить выражение.

гт(1яГассог(10, 5)) Сопяо1е.Хгьсевгпе("Число 5 является множителем 10.")7 гт(!1яГассог(10, 7)) Сопяо1е.игьсеввпе("Число 7 не является множителем 10.")) Сопяо1е.ХгьсеЬгпе()7 Вот к какому результату приводит выполнение этой программы. 678 часть ). язык С№ Число 5 является множителем 10. Число 7 не является множителем 10. Данный пример программы наглядно показывает два основных этапа применения дерева выражений. Сначала в ней создается дерево выражений с помощью следующего оператора.

Ехргевв1оп<гипс<гпг, 1пг, Ьсо1» 1веасгзгехр = (и, г() => (г) != О) ? (и % и) == 0 : га1ве( В этом операторе консгруируется представление лямбда-выражения в оперативной памяти. Как пояснялось выше, это представление доступно по ссылке, присваиваемой делегату 1в ЕассогЕхр. А в следующем операторе данные выражения преобразуются в исполняемый код.

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

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

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

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

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

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

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