Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Herb@HerbSchildt.com
Tom@HerbSchildt.com
Sara@HerbSchildt.com
Обратите особое внимание на следующий оператор select.
select entry.Address;
Вместо полного значения переменной диапазона этот оператор возвращает лишь его адресную часть (Address). Это означает, что по данному запросу возвращается последовательность символьных строк, а не объектов типа EmailAddress
. Именно поэтому переменная s указывается в цикле foreach
как string
. Ведь как пояснялось ранее, тип последовательности результатов, возвращаемых по запросу, определяется типом значения, возвращаемым оператором select.
Одной из самых эффективных для оператора select
является возможность возвращать последовательность результатов, содержащую элементы данных, формируемые во время выполнения запроса. В качестве примера рассмотрим еще одну программу. В ней определяется класс ContactInfo
, в котором хранится имя, адрес электронной почты и номер телефона адресата. Кроме того, в этой программе определяется класс EmailAddress
, использовавшийся в предыдущем примере. В методе Main()
создается массив объектов типа ContactInfo
, а затем объявляется запрос, в котором источником данных служит этот массив, но возвращаемая последовательность результатов содержит объекты типа EmailAddress
. Таким образом, типом последовательности результатов, возвращаемой оператором select
, является класс EmailAddress
, а не класс ContactInfo
, причем его объекты создаются во время выполнения запроса.
// Использовать запрос для получения последовательности объектов
// типа EmailAddresses из списка объектов типа ContactInfo.
using System;
using System.Linq;
class ContactInfo {
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public ContactInfo(string n, string a, string p) {
Name = n;
Email = a;
Phone = p;
}
}
class EmailAddress {
public string Name { get; set; }
public string Address { get; set; }
public EmailAddress(string n, string a) {
Name = n;
Address = a;
}
}
class SelectDemo3 {
static void Main() {
ContactInfo[] contacts = {
new ContactInfo("Герберт", "Herb@HerbSchildt.com", "555-1010"),
new ContactInfo("Том", "Tom@HerbSchildt.com", "555-1101"),
new ContactInfo("Capa", "Sara@HerbSchildt.com", "555-0110")
};
// Сформировать запрос на получение
// списка объектов типа EmailAddress.
var emailList = from entry in contacts
select new EmailAddress(entry.Name, entry.Email);
Console.WriteLine("Список адресов электронной почты:");
// Выполнить запрос и вывести его результаты,
foreach(EmailAddress e in emailList)
Console.WriteLine(" {0}: {1}", e.Name, e.Address );
}
}
Ниже приведен результат выполнения этой программы.
Список адресов электронной почты:
Герберт: Herb@HerbSchildt.com
Том: Tom@HerbSchildt.com
Сара: Sara@HerbSchildt.com
Обратите особое внимание в данном запросе на следующий оператор select
.
select new EmailAddress(entry.Name, entry.Email);
В этом операторе создается новый объект типа EmailAddress
, содержащий имя и адрес электронной почты, получаемые из объекта типа ContactInfo
, хранящегося в массиве contacts
. Но самое главное, что новые объекты типа EmailAddress
создаются в операторе select во время выполнения запроса.
Применение вложенных операторов from
Запрос может состоять из нескольких операторов fгom
от, которые оказываются в этом случае вложенными. Такие операторы 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', 'В', '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:
А X
A Y
A 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
сохраняется в переменной ch2
и далее выполняется оператор select
. В результате выполнения оператора select
создается новый объект типа ChrPair
, содержащий пару символов, которые сохраняются в переменных ch1
и ch2
на каждом шаге циклического обращения к массиву во внутреннем операторе from
. А в конечном итоге получается объект типа ChrPair
, содержащий все возможные сочетания извлекаемых символов.
Интервал:
Закладка: