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

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 125

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

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

Ниже приведен переделанный вариант данного запроса, в котором вместо синтаксиса, предусмотренного в С№ для запросов, используется метод запроса го1п () . // использовать метод запроса Зоъп() для составления // списка наименований товаров и состояния их запасов на складе. тат гпзсосКЬьзп = 1певз.зогп(зпасозьгзп, К1 => К1.1севповЬег, К2 => К2. 1певпшпЬег, (к1, кг) => пе тевр(к).паве, кг.гпзгоск) ); В данном варианте именованный класс Тевр используется для хранения результирующего объекта, но вместо него можно воспользоваться анонимным типом.

Такой вариант запроса приведен ниже. тат ъпэгоскььзс = ъсевз.доъп(зсапозьвзс, К1 -> К1. 1певповье -, К2 => К2.1севппввег, (К1, К2) => пен ( К1.Паве, К2.1пэсосК) ) Синтаксис запросов в сравнении с методами запроса Как пояснялось в предыдущем разделе, запросы в С№ можно формировать двумя способами, используя синтаксис запросов или методы запроса. Любопытно, что оба способа связаны друг с другом более тесно, чем кажется, глядя на исходный код программы.

Дело в том, что синтаксис запросов компилируется в вызовы методов запроса. Поэтому код мнете х < 10 будет преобразован компилятором в следующий вызов: ипеге(х => х < 10) Таким образом, оба способа формирования запросов в конечном итоге сходятся в одном и том же месте. Но если оба способа оказываются в конечном счете равноценными, то какой из них лучше для программирования на С№7 В целом рекомендуется чаще пользоваться синтаксисом запросов, поскольку он полностью интегрирован в язык С№, поддерживается соответствующими ключевыми словами и синтаксическим конструкциями и выглядит яснее.

Дополнительные методы расширения, связанные с запросами Помимо методов, соответствующих операторам запроса, поддерживаемым в С№, имеется ряд других методов расширения, связанных с запросами и зачастую оказывающих помощь в формировании запросов. Эти методы предоставляются в среде .НЕТ Ргашепяог)( и определены для интерфейса 1ЕппвегаЬ1е<Т> в классе ЕпивегаЬ1е. Ниже приведены наиболее употребительные методы расширения, связанные с запросами. Многие их них могут перегружаться, поэтому они представлены лишь в самой общей форме.

б48 Часть!. язык Сз Метод Описание А11(условие) Апу(условие) Ачегасе() Сопсакпв (оОУ) Возвращает логическое значение кгпв, если в последовательности содержится указанный объект Сопок () Метод Соштс () уже демонстрировался ранее а этой главе. А в следующей программе демонстрируются остальные методы расширения, связанные с запросами: // Использовать ряд методов расширения, определенных в классе Еппвегав1е. пв1пд зузселн паунд зувсев.ЬЬпяг с1авв ЕхСМекнобв ( зсасэс чокб Мако() ( Ьпк() пьвв= ( 3, 1, 2, 5, 4 )1 Сопво1е.игэкеЬЬпе("Минимальное значение равно " + ппвз.МЬп()); Сопзо1е.игтсеЬЬпе("Максимальное значение равно " + ппвв.мах(])~ СОПВО1Е.ИГЬСЕЬЬПЕ(впврВОЕ ЗиаЧЕНИЕ раВНО " + ППВЗ.ГЬГВК()); Сопзо1е.иг1сеЬЬпе("Последнее значение равно " +поев.Ьавс())г Сопво1е.игукеЬ1пе("Суммарное значение равно " + ппвв.зпв М ); Сопво1е.игзсеЬЬпе("Среднее значение равно " + ппвв.Ачегаое()); ЬГ(ппвв.А11(п => и > О)) Сопво1е.игусеЬЬпе("Все значения больше нуля.") 15(ппвз.Апу(п => (и % 2) == О)) Сопво1е.игзкеьупе("по крайней мере одно значение " т "является нечетным."); 51гзс () Ьавс () мах () Мвп () зпв() Возвращает логическое значение кгпв, если все элементы в последовательно- сти удовлетворяют указанному условию Возвращает логическое значение кгпв, если любой элемент в последователь- ности удовлетворяет указанному условию ВозвРащает среднее всех значений в числовой последовательности Возвращает длину последовательности, те.

количество составляющих ее эле- ментов Возвращает первый элемент в последовательности Возвращает последний элемент в последовательности Возвращает максимальное значение в последовательности Возвращает минимальное значение в последовательности Возвращает сумму значений в числовой последовательности Глава (д. 1)И0 649 11(ппвя.Сопгатпв(3)) СОПяО1Е.ИГ1СЕЬ1ПЕ("МаССИВ СОдЕржИт ЗНаЧЕНИЕ З.я) Вот к какому результату приводит выполнение этой программы: Минимальное значение равно 1 Максимальное значение равно 5 Первое значение равно 3 Последнее значение равно 4 Суммарное значение равно 15 Среднее значение равно 3 Все значения больше нуля.

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

// Использовать метод Лчегаде() вместе с синтаксисом запросов. пя1пд зуяяевн пя1пд зуясев.11пдл с1аяя Ехянепнобяз ( япаг1с иота Матп() ( тпг() ппвя = ( 1, 2, 4, 8, б, 9, 10, 3, б, 7 )) уаг 1яауд = Гсов и 1п ппвя 1ея х = ппвя.ячегаде() кпеге и < х яе1есс и; Сопяо1е.нгтяеьтпе (" Среднее значение равно " + ппвя.ачегаде () ) Сопяо1е.нгтяе(вэначения меньше среднего: "); // Выполнить запрос и вывести его результаты.

Гогеасл(1пя 1 1п 1яачд) Сопяо1е.нгтяе(1 + " ") Сопяо1е.нгтпе11пе(); ) ) При выполнении этой программы получается следуюший результат: Среднее значение равно 5.б Значения меньше среднего: 1 2 4 3 650 Часть ). язык Сз Особое внимание в этой программе обратите иа следующий код запроса: тат 1СачЧ = Ггож п хи пиыя 1ес х = пиыя.ачегафе() ыиеге и < х яе1есС п; Как видите, переменной х в операторе 1ес присваивается среднее всех значений в массиве пиита.

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

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

// Испольэовать режим немедленного выполнения запроса. пягпф зуясеыт натив зуякеы.ьтпЧ; с1аяя 1пыет(1акезхес ( якакхс чогв Ма1п() ( 1йс() йпйя = ( 1, -2, 3, О, -4, 5 // Сформировать запрос на получение количества // положительных значений в массиве пизе. 1йС 1ей = (ГГОБ й хй йиия ньеге п > О яе1есС п) . Соопк () т Соияо1е.кггкепгпе("Количество положительных " т "значений в массиве опия: " + 1еп)т Глава 19, ыиО 661 Эта программа дает следующий результат: Количествс положительных значений в массиве ловя: 3 Обратите внимание на то, что цикл гогеасЬ не указан в данной программе явным образом.

Вместо этого запрос выполняется автоматически благодаря вызову метода расширения Сопле () . Любопытно, что запрос из приведенной выше программы можно было бы сформировать и следующим образом: тат рояповя = Ггов и ьо ловя ыьеге и > 0 яе1есе и; гпс 1еп = рояповя.СоопС()! // запрос выполняется здесь В данном случае метод сопле () вызывается для переменной запроса.

И в этот момент запрос выполняется для получения подсчитанного количества. К числу других методов расширения, вызывающих немедленное выполнение запроса, относятся методы тойггау () и тоЫяс () . Оба этих метода расширения определены в классе ЕппвегаЬ1е. Метод тоАггау() возвращает результаты запроса в массиве, а метод тоьгяг () — результаты запроса в форме коллекции ляг. (подробнее о коллекциях речь пойдет в главе 24.) В обоих случаях для получения результатов выполняется запрос. Например, в следующем фрагменте кода сначала получается массив результатов, сформированных по приведенному выше запросу в переменной рояипвя, а затем эти результаты выводятся на экран. гпе[) рповя = роянов.тоАггау(); // запрос выполняется здесь Гогеясв(гпе 1 ъп рповя) Сопяо1е.иггое(1 + " "); Деревья выражений Еще одним новшеством, связанным с [.!ХО, является дерево выражений, которое представляет лямбда-выражение в виде данных.

Это означает, что само лямбда-выражение нельзя выполнить, но можно преобразовать в исполняемую форму. Деревья выражений инкапсулируются в классе Зуягев. Ь1пг(. Кхргеяяаопя. Нхргеяя1оп<т>. Они оказываются пригодными в тех случаях, когда запрос выполняется вне программы, например средствами БО[. в базе данных. Если запрос представлен в виде данных, то его можно преобразовать в формат, понятный для базы данных. Этот процесс выполняется, например, средствами ) !)ь)(1 го 3(1).

в среде Ч(зпа! Япйо. Таким образом, деревья выражений способствуют поддержке в С(( различных баз данных. Для получения исполняемой формы дерева выражений достаточно вызвать метод совр11е О, определенный в классе кхртеяяуоп. Этот метод возвращает ссылку, которая может быть присвоена делегату для последующего выполнения. А тип делегата может быть объявлен собственным или же одним из предопределенных типов делегата рппс в пространстве имен Зуягев.

Две формы делегата гипс уже упоминались ранее при рассмотрении методов запроса. Ниже перечислены все формы этого делегата. 652 Часть ). Язык С() с)е1есаге Таеяп1С Гппс<таеяп1С>() ое1ечаге Таеяп1С Гипс<Т1, ТРеяи1С>() с(е1ечасе ткеяп1с Гппс<т1, т2, ткеяп1с>() с(е1ечасе ткеяи1с Гппс<т1, т2, тз, ткеяп1с>() с)е1ечасе ткеяп1с Гппс<т1, т2, тз, т4, ткеяп1с>() Эти формы представляют методы, возвращающие значение и принимающие до четырех параметров типа т1-т4 либо вообще не принимающие параметры, как в первой форме делегата Гнпс.

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

И наконец, в данной программе демонстрируется выполнение скомпилированного кода. // Пример простого дерева выражений. иятпч 5уягем; пя1пч 5узгеж.ъзпч; пятпч зуягев.ъгпч.ххргеяязопя) с1аяя 51мр1еБхрТгее ( ягагзс тотс) Маго() ( // Представить лямбла-выраженне в виде данных. Ехргеяяхоп<Гппс<тпС, 1пС, Ьос1» 1яГасгогкхр = (и, й) => (с) )= 0) 7 (и % и) == 0 : Та1яез // Скомпилировать данные выражения в исполняемый код.

Гппс<зпг, 1пг, Ьоо1> Хягасгог = 1яГасгогххр.Сомр11е() // Выполнить выражение. 11(1яГасгог(10, 5)) Сопяо1е.иг1Се11пе("Число 5 является множителем 10.") 11()1яГасгог(10, 7)) Ссляп1Е.ИГТСЕ11ПЕ("ЧИСЛО 7 НЕ яВЛяЕтСя МНОжИтЕЛЕМ 10.я); Сопяо1е.игтгеьгпе() ) Вот к какому результату приводит выполнение этой программы: Глава (9. '0))(0 653 Число 5 является множителем 10. Число 7 не является множителем 10. Данный пример программы наглядно показывает два основных этапа применения дерева выражений.

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6551
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее