-->

Полное руководство. С# 4.0

На нашем литературном портале можно бесплатно читать книгу Полное руководство. С# 4.0, Шилдт Герберт-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Полное руководство. С# 4.0
Название: Полное руководство. С# 4.0
Дата добавления: 16 январь 2020
Количество просмотров: 269
Читать онлайн

Полное руководство. С# 4.0 читать книгу онлайн

Полное руководство. С# 4.0 - читать бесплатно онлайн , автор Шилдт Герберт

В этом полном руководстве по C# 4.0 — языку программирования, разработанному специально для среды .NET, — детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.

В данной книге вы найдете:- Полное описание средств языка C#- Подробное рассмотрение новых средств в версии C# 4.0, в том числе PLINQ, библиотеку TPL, именованные и необязательные аргументы, динамический тип данных и многое другое- Сотни простых и понятных примеров программ с комментариями.- Самый полный источник информации по C#Благодаря поддержке параллельного языка интегрированных запросов (PLINQ) и библиотеки распараллеливания задач (TPL) версия 4.0 стала новой вехой в программировании на C#, и поэтому Герберт Шилдт, автор лучших книг по программированию, обновил и расширил свое классическое руководство, чтобы охватить в нем эти и другие нововведения. В книге подробно описываются языковые средства C#, даются профессиональные рекомендации и приводятся сотни примеров программ, охватывающих все аспекты программирования на C#, включая синтаксис, ключевые слова и основные библиотеки, не говоря уже о таких новшествах, как PLINQ, TPL, динамический тип данных, а также именованные и необязательные аргументы.Это необходимое каждому программирующему на C# справочное руководство написано простым и доступным языком, благодаря которому Герберт Шилдт стал таким популярным. В книге найдут ответы на насущные вопросы по C# как начинающие, так и опытные программисты.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

Ниже приведен результат выполнения этой программы.Список адресов электронной почты: Герберт: [email protected] Том: [email protected] Сара: [email protected]

Обратите особое внимание в данном запросе на следующий оператор select.select new EmailAddress(entry.Name, entry.Email);

В этом операторе создается новый объект типа EmailAddress, содержащий имяи адрес электронной почты, получаемые из объекта типа ContactInfo, хранящегосяв массиве contacts. Но самое главное, что новые объекты типа EmailAddress создаются в операторе select во время выполнения запроса.Применение вложенных операторов from

Запрос может состоять из нескольких операторов from, которые оказываются вэтом случае вложенными. Такие операторы from находят применение в тех случаях,когда по запросу требуется получить данные из двух разных источников. Рассмотримпростой пример, в котором два вложенных оператора from используются в запроседля циклического обращения к элементам двух разных массивов символов. В итогепо такому запросу формируется последовательность результатов, содержащая все возможные комбинации двух наборов символов.// Использовать два вложенных оператора from для составления списка// всех возможных сочетаний букв А, В и С с буквами X, Y и Z.using System;using System.Linq;// Этот класс содержит результат запроса.class ChrPair { public char First; public char Second; public ChrPair(char c, char c2) { First = c; Second = c2; }}class MultipleFroms { static void Main() { char[] chrs = { 'A', 'B', 'C' }; char[] chrs2 = { 'X', 'Y', 'Z' }; // В первом операторе from организуется циклическое обращение // к массиву символов chrs, а во втором операторе from — // циклическое обращение к массиву символов chrs2. var pairs = from ch1 in chrs from ch2 in chrs2 select new ChrPair(ch1, ch2); Console.WriteLine("Все сочетания букв ABC и XYZ: "); foreach(var p in pairs) Console.WriteLine("{0} {1}", p.First, p.Second); }}

Выполнение этого кода приводит к следующему результату.Все сочетания букв ABC и XYZ:А XA YA ZВ XВ YВ ZС XС YС Z

Этот пример кода начинается с создания класса ChrPair, в котором содержатсярезультаты запроса. Затем в нем создаются два массива, chrs и chrs2, и, наконец,формируется следующий запрос для получения всех возможных комбинаций двух последовательностей результатов.var pairs = from ch1 in chrs from ch2 in chrs2 select new ChrPair(ch1, ch2);

Во вложенных операторах from организуется циклическое обращение к обоиммассивам символов, chrs и chrs2. Сначала из массива chrs получается символ, сохраняемый в переменной ch1. Затем перечисляется содержимое массива chrs2. Накаждом шаге циклического обращения во внутреннем операторе from символ измассива chrs2 сохраняется в переменной сh2 и далее выполняется оператор select.В результате выполнения оператора select создается новый объект типа ChrPair,содержащий пару символов, которые сохраняются в переменных ch1 и ch2 на каждомшаге циклического обращения к массиву во внутреннем операторе from. А в конечномитоге получается объект типа ChrPair, содержащий все возможные сочетания извлекаемых символов.

Вложенные операторы from применяются также для циклического обращения кисточнику данных, который содержится в другом источнике данных. Соответствующий пример приведен в разделе "Применение оператора let для создания временной переменной в запросе" далее в этой главе.Группирование результатов с помощью оператора group

Одним из самых эффективных средств формирования запроса является операторgroup, поскольку он позволяет группировать полученные результаты по ключам. Используя последовательность сгруппированных результатов, можно без особого труда получить доступ ко всем данным, связанным с ключом. Благодаря этому свойствуоператора group доступ к данным, организованным в последовательности связанныхэлементов, осуществляется просто и эффективно. Оператор group является одним издвух операторов, которыми может оканчиваться запрос. (Вторым оператором, завершающим запрос, является select.) Ниже приведена общая форма оператора group.group переменная_диапазона by ключ

Этот оператор возвращает данные, сгруппированные в последовательности, причем каждую последовательность обозначает общий ключ.

Результатом выполнения оператора group является последовательность, состоящая из элементов типа IGrouping<TKey, TElement>, т.е. обобщенного интерфейса,объявляемого в пространстве имен System.Linq. В этом интерфейсе определена коллекция объектов с общим ключом. Типом переменной запроса, возвращающего группу, является IEnumerable<IGrouping<TKey, TElement>>. В интерфейсе IGroupingопределено также доступное только для чтения свойство Key, возвращающее ключ,связанный с каждой коллекцией.

Ниже приведен пример, демонстрирующий применение оператора group. В кодеэтого примера сначала объявляется массив, содержащий список веб-сайтов, а затемформируется запрос, в котором этот список группируется по имени домена самоговерхнего уровня, например .org или .com.// Продемонстрировать применение оператора group.using System;using System.Linq;class GroupDemo { static void Main() { string[] websites = { "hsNameA.com", "hsNameB.net", "hsNameC.net", "hsNameD.com", "hsNameE.org", "hsNameF.org", "hsNameG.tv", "hsNameH.net", "hsNameI.tv" }; // Сформировать запрос на получение списка веб-сайтов, // группируемых по имени домена самого верхнего уровня. var webAddrs = from addr in websites where addr.LastIndexOf('.') != -1 group addr by addr.Substring(addr.LastIndexOf('.')); // Выполнить запрос и вывести его результаты. foreach(var sites in webAddrs) { Console.WriteLine("Веб-сайты, сгруппированные " + "по имени домена" + sites.Key); foreach(var site in sites) Console.WriteLine(" " + site); Console.WriteLine(); } }}

Вот к какому результату приводит выполнение этого кода.Веб-сайты, сгруппированные по имени домена .соm hsNameA.com hsNameD.comВеб-сайты, сгруппированные по имени домена .net hsNameB.net hsNameC.net hsNameH.netВеб-сайты, сгруппированные по имени домена .org hsNameE.org hsNameF.orgВеб-сайты, сгруппированные по имени домена .tv hsNameG.tv hsNameI.tv

Как следует из приведенного выше результата, данные, получаемые по запросу,группируются по имени домена самого верхнего уровня в адресе веб-сайта. Обратитевнимание на то, как это делается в операторе group из следующего запроса.var webAddrs = from addr in websites where addr.LastlndexOf('.') != -1 group addr by addr.Substring(addr.LastIndexOf('.'));

Ключ в этом операторе создается с помощью методов LastIndexOf()и Substring(), определенных для данных типа string. (Эти методы упоминаютсяв главе 7, посвященной массивам и строкам. Вариант метода Substring(), используемый в данном примере, возвращает подстроку, начинающуюся с места, обозначаемого индексом, и продолжающуюся до конца вызывающей строки.) Индекс последней точки в адресе веб-сайта определяется с помощью метода LastIndexOf().По этому индексу в методе Substring() создается оставшаяся часть строки, в которой содержится имя домена самого верхнего уровня. Обратите внимание на то,что в операторе where отсеиваются все строки, которые не содержат точку. МетодLastIndexOf() возвращает -1, если указанная подстрока не содержится в вызывающей строке.

Последовательность результатов, получаемых при выполнении запроса, хранящегося в переменной webAddrs, представляет собой список групп, поэтому для доступак каждому члену группы требуются два цикла foreach. Доступ к каждой группе осуществляется во внешнем цикле, а члены внутри группы перечисляются во внутреннемцикле. Переменная шага внешнего цикла foreach должна быть экземпляром интерфейса IGrouping, совместимым с ключом и типом элемента данных. В рассматриваемом здесь примере ключи и элементы данных относятся к типу string. Поэтомупеременная sites шага внешнего цикла имеет тип IGrouping,а переменная site шага внутреннего цикла — тип string. Ради краткости данногопримера обе переменные объявляются неявно, хотя их можно объявить и явным образом, как показано ниже.foreach(IGrouping<string, string> sites in webAddrs) { Console.WriteLine("Веб-сайты, сгруппированные " + "по имени домена" + sites.Key); foreach(string site in sites) Console.WriteLine(" " + site); Console.WriteLine();}Продолжение запроса с помощью оператора into

Перейти на страницу:
Комментариев (0)
название