Предисловие

Поначалу, когда Джефф попросил меня написать предисловие для своей книги,

я была очень польщена. Я подумала, что он по-настоящему меня уважает.

Дорогие мои, поверьте, это общее заблуждение наивных людей, на самом деле,

здесь нечто совсем иное. Я была под номером 1 4 в его списке потенциальных

авторов предисловия для своей книги. И лишь когда Джеффу стало очевидно,

что другие кандидаты из этого списка (Билл Гейтс, Стив Балмер, Кэтрин ЗетаДжане

и т. д.) не согласятся, он повел меня ужинать.

Тем не менее никто не сможет рассказать вам об этой книге больше, чем я.

Я имею в виду, что Кэтрин Зета-Джане, конечно, могла бы подробно рассказать

вам о сервисе 􀇊мoblle Makeover> 1 , но я-то знаю обо всех отражениях, исключениях

и модификациях языка С#, потому что мы с Джеффом обсуждали

это годами . Для нас это было обычным разговором за ужином ! Другие люди

говорят о погоде, а мы - о .NET. Даже Адэн, наш шестилетний сын, задает

вопросы о книге Джеффа. Правда, в основном о том, начнут ли они, наконец,

во что- нибудь играть, когда Джефф напишет свою книгу. Двухлетний Грант

пока не говорит, но, возможно, первым его словом будет 􀇊сериализация> .

Н а самом деле, если в ы хотите знать, как все начиналось, то это происходило

следующим образом. Приблизительно 1 0 лет назад Джефф посетил 􀇊секретное

Совещание> в M icrosoft. Компания привлекла группу экспертов (а на самом

деле, откуда у Джеффа этот титул? На эксперта в школе не учат) и представила

новую технологию взамен СОМ. Поздно ночью, в постели (у нас принято

обсуждать это в постели) он сказал, что С О М померла. При этом Джефф был

просто потрясен новой технологией. Практически втрескался в нее. В течение

нескольких дней он ходил вокруг строения 42 в Редмондеком кампусе

Microsoft, надеясь узнать о .NET побольше. Похоже, его 􀇊роман> продолжается

до сих пор, раз он даже решил написать об этом книгу.

Годами Джефф рассказывал мне о многопоточности. Ему по-настоящему

нравится эта тема. Однажды, в Новом Орлеане, мы с ним пошли на двухчасовую

прогулку, и всю дорогу он твердил мне о том, что у него достаточно материала

для книги 􀇊искусство многопоточности>. Как я могу не понимать многопоточность

в Windows?! Это буквально разрывало его сердце. Как вьmолняются потоки?

Почему они создаются, если нет четкого плана их работы? Эти вопросы составляют

основу мироощущения Джеффа, они стали смыслом его жизни. В конце концов,

всех их он включил в эту книгу. Они все здесь, и поверьте мне, если вы хотите

знать о многопоточности и потоках, ниiСЮ не расскажет вам о них лучше и больше,

чем Джефф. И все потраченные на это часы его жизни (их уже не вернуть) здесь,

в вашем распоряжении. Пожалуйста, прочтите эту книгу. А потом пошлите Джеффу

электронное письмо с рассказом о том, как эта кюпа изменила вашу жизнь. Если вы

этого не сделаете, он станет еще одним трагическим персонажем, чья жизнь прошла

бессмысленно и беспросветно. И он упьется до смерти диетическим лимонадом.

1 Кэтрин Зета-Джонс рекламирует этот сервис на американском телевидении. - При.меч. перев.

П редисловие 1 3

Эта редакция книги включает в себя новую главу о сериализации в о время

выполнения программы. Оказывается, это совсем не так просто, как залить молоком

кукурузные хлопья на завтрак для детей. Ко г да я пыталась в этом разобраться,

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

мир. И хотя я так и не поняла, что это, об этом написано в книге, и вы можете

об этом прочитать (запивая молоком).

Сейчас у меня одна надежда, что дорогой Джефф перестанет рассуждать

о теории сборки мусора, а реально соберет мусор и вынесет его на помойку.

Действительно, ну неужели это так сложно?

И последний довод, дорогие мои, - это самое главное и самое последнее

произведение Джеффри Рихтера. Больше книг не будет. Конечно, мы говорим

это каждый раз, когда он заканчивает очередную книгу, но в этот раз мы

действительно так думаем. Итак, было 13 книг, но эта - лучшая и последняя.

Быстрее ее покупайте, потому что тираж книги ограничен, и если его весь раскупят,

то больше книг не будет. Как у QVC 1 • Ну, а мы из виртуальной жизни

вернемся в реальную и сможем обсудить действительно важные вещи, например,

что же сегодня разбили наши детки и чья очередь менять подгузники.

Кристин Трейс (женаДжеффри)

24 ноября 2009 года

Обыч н ы й завтрак в семье Рихтеров

1 Qvc.com - сайт, на котором распродают товары с о скидкой З<l ограниченнос время по принципу

􀈞кто 11е успел, тот опоздал􀈟. - Примеч. перев.

Введение

В октябре 1 999 года люди из Microsoft впервые продемонстрировали мне

платформу . N E T Framework, о бщеязыковую среду выпол1lе1lия ( C ommon

Language Runtime, CRL) и язык программирования С#. Когда я впервые это

увидел, то был очень сильно впечатлен и сразу понял, что процесс создания

мною программнога обеспечения претерпит существенные изменения. Меня

попросили проконсультировать команду разработчиков, и я немедленно дал

свое согласие. П оначалу я думал, что платформа .NET Framework является

некоей прослойкой между И1lmерфейсами програ.м.мирова1lия приложе1lий

( Application Program Interface, API) Win32 и обьекm1lоЙ моделью кo.мno1le1lmoв

( C omponent Obj ect Model, С О М ) . Но чем больше я ее изучал , тем больше

различий находил. В некотором смысле это операционная система. У нее

собственные менеджер виртуальной памяти, система безопасности, файловый

загрузчик, механизм обработки ошибок, изолированная среда, в которой выполняются

домены приложений, модель многопоточности и многое другое.

В этой книге все эти темы освещаются таким образом, чтобы вы мог ли эффективно

проектировать и реализовывать программное обеспечение на этой

платформе.

Я провел много времени, разбираясь в понятиях многопоточности, одновременном

в ы п о л н е н и и , параллелизме, синхронизации и т. д . Сегодня,

когда м ногоядерные компьютеры получили широкое распространение, эти

понятия приобретают все большую важность. Несколько лет назад я решил

написать книгу, посвященную многопоточности. Однако один вопрос тянул

за собой другой , и в результате книгу о многопоточности я так и не написал.

Однако когда пришло время переработать эту книгу, я решил включить

в нее сведения о многопоточности. Таким образом, эта книга затрагивает

платформу .NET Framework, язык программирования С# и многопоточность

(см. часть V ) .

Я писал текст первого издания этой книги в октябре 2009 года, и уже прошло

10 лет с тех пор, как я работаю с платформой .NET Framework и языком

программирования С # . За эти 1 0 лет я создал разнообразные приложения

и как консультант компании Microsoft внес значительный вклад в разработку

платформы .NET Framework. В качестве сотрудника своей компании Wintellect

( http:/ /Wi nte l lect.com) я работал со многими зак<lЗчиками, помогая им проектировать

программное обеспечение, отлаживать и оптимизировать программы,

решать их проблемы, связанные с .NET Framework. Весь этот опыт помог мне

реально узнать, какие именно проблемы возникают у людей при работе с платформой

.NET Framework и как эти проблемы решать. Я попытался сопроводить

этими знаниями все темы, представленные в этой книге.

Для кого эта кн и га

Для кого эта книга 1 5

Цель этой книги - объяснить, как разрабатывать приложения и многократно

используемые классы для .NET Framework. В частности, это означает, что я

собираюсь рассказать, как работает среда C LR, какие возможности она предоставляет

разработчику. В этой книге также описываются различные классы

cma1tдapm1toй 6uблuome1CU 'КЛассов ( Framework Class Library, FCL). Ни в одной

книге невозможно описать F C L полностью - она содержит тысячи типов,

и и х число продолжает расти ударными темпами. Так что я остановлюсь на

основных типах, с которыми должен быть знаком каждый разработчик. И хотя

в этой книге не рассматриваются отдельно подсистема графического интерфейса

пользователя Windows Forms, система для построения клиентских приложений

Windows Presentation Foundation (WPF), платформа Silverlight, X M L

веб-сервисы, веб-формы и т. д., технологии, описанные в ней, применимы ко

всем. этим видам приложений.

В книге используются системы Microsoft Visual Studio 20 1 0, .NET Framework 4.0

и компилятор С# версии 4.0. В компании Microsoft стараются обеспечивать

максимальную обратную совместимость разрабатываемых программных продуктов,

поэтому многое из того, что обсуждается в данной книге, применимо

и к ранним версиям. Все примеры в книге написаны на языке С#, но так как

в среде CLR можно использовать различные языки программирования, книга

пригодится также и тем, кто пишет на других языках программирования.

П Р И М ЕЧАНИ Е

В ы м ожете загрузить п р и м е р ы и з к н и г и с с а й т а ко м п а н и и W i п te l le c t

( http://Wiпte l lect.c o m ) . В раз н ы х раздел ах к н и г и я о п и с ы в а ю к л а с с ы и з

м о е й собстве н н о й библиотеки Power Th read i n g Library. Э т а б и бл и отека

свободно рас п ространяется и ее тоже можно скачать с сайта ко м п а н и и

Winte l l ect.

На сегодняшний день компания Microsoft предлагает несколько версий среды

CLR. Это серверная версия, которая выполняется на 3 2-разрядной системе

Windows под архитектуру х86, а также на 64-разрядной системе Windows под

архитектуры х64 и IA64. Еще предлагается версия под платформу Silverlight,

которая реализована на основе программнога кода серверной версии среды

CLR. Следовательно, все, что описано в данной книге, применимо и к построению

приложений под платформу Silverlight, за исключением некоторых

отличий, касающихся того, как Silverlight запускает сборки. Компания Microsoft

также предлагает облегченную версию .NET Framework для мобильных телефонов

и других устройств с операционными системами Windows Moblle

и Windows СЕ, которая называется .NET Compact Framework. Многое и з того,

что рассмотрено в данной книге, применимо для разработки приложений под

.NET Compact Framework, но это не основное, на чем был сделан акцент.

1 6 В ведение

1 3 декабря 2001 года Е вропейская ассоциация п о стандартизации и н формационных

и вычислительных систем ЕСМА I nternational ( http:jjwww.

ecm a - internati onal. org /) приняла в качестве стандарта язык С# и некоторые

компоненты среды CLR и библиотеки FCL. Этот стандарт позволил сторонним

компаниям разработать ЕСМА-совместимые версии этих технологий под

архитектуру других процессаров и операционных систем. В действительности,

Novell выпускает платформу Moonlight (http:jjm ono-project.comj M oonlig ht),

реализацию платформы Silverlight с открытым кодом ( http://Si lverlight.net), которая,

прежде всего, ориентирована на Linux и другие операционные системы на

основе UNIX/X11 . Платформа Moonlight основана на ЕСМА-спецификациях.

Л ьвиная доля этой книги посвящена описанию этих стандартов, поэтому

многие найдут эту книгу полезной при работе с реализациями приложений

и библиотек, совместимых со спецификацией ЕСМА.

П Р И М ЕЧАН И Е

Я и м о и редакторы усердно nотрудились, чтобы дать вам наиболее точную,

свежую, исчерпывающую, удобную, понятную и безошибочную информацию.

Однако даже эта фантастическая команда н е может предусмотреть все.

Есл и вы обнаружите в этой книге ошибки (особен но ошибки в программнам

коде) или же у вас появится конструктивное предложение, то я буду

вам очень признателен за сообщение об этом по моему адресу: JeffreyR@

Winte l l ect.com.

П освящение

Кристин. Словами н е выразить то, что я думаю о нашей совместной жизни.

Я с нежностью отношусь к нашей семье и ко всем нашим семейным радостям.

Каждый день моей жизни наполнен любовью к тебе.

Адэн (6 лет) и Граш (2 года). Вы оба вдохновляли меня, учили меня играть

и весело проводить время. Наблюдения за тем, как вы росли, были прекрасны

и полезны. Я рад быть частью вашей жизни. Я люблю и ценю вас больше всех

на свете.

Благодарности

Я бы не написал эту книгу без помощи и технической поддержки многих

людей. В частности, я хотел бы поблагодарить мою семью. Очень сложно измерить

время и усилия, которые требуются для написания хорошей книги, но

я знаю точно, что без поддержки моей жены Кристин и двух сыновей, Адэна

и Гранта, я никогда не смог бы эту книгу написать. Очень часто наши планы

М ы хотим вас усл ы ш ать 1 7

с овместн ого времяпров ождения ерывались из-за жестк ог о графика раб оты

над книгой. Теперь, по завершении раб оты над ней, я с рад остью предвкушаю

рад ость общения с семьей.

В написании книги мне п ом огали фантастические люди. Кристоф Насарр

(Christophe Nasarre) выполнил титанический труд по пр оверке м оей раб оты

и позаб отился о точности и корректн ости ф ормулир ов ок. Он внес очень б ольшой

вклад в повышение качества книги . Как всегда, был о очень приятн о раб отать

с редакторской командой Microsoft Press. Отдельную благодарность я х очу

выразить Бену Райану ( Ben Ryan) , Вэлери Вулли (Valerie Woolley) и Дэвону

Масгрейву (Devon Musgrave) . Спасиб о также Джин Ф индли (Jean Findley)

и Сью МакКланг ( Sue McClung) за редактуру и п ом ощь при выпуске книги.

Поддержка

Мы прил ожили максимум усилий, чтобы эта книга была как м ожн о б олее точной.

Все исправления и изменения будут добавлены в соответствующую статью

Базы знаний (M icrosoft Knowledge Base), доступную на сайте 􀅐 Справка и п оддержка

Microsoft> . Издательств о Microsoft Press п остоянно обн овляет спис ок

исправлений и доп олнений к своим книгам, к от орые д оступны п о адресу http://

micr osoft. comjlear n i ngjs u p p ortjboo ks/.

Если у вас все же в озникнут в опр осы, ответы на к оторые вы не сможете

найти на предл оженных сайтах или в статьях Базы знаний, то м ожете задать

эти в опросы в письме, отправив его по адресу m spi nput@micr os oft.c o m .

П ожалуйста, обратите внимание, ч т о п о указанным адресам техническая

поддержка пр ограммных продукт ов не предоставляется.

М ы хоти м вас усл ышать

Мы приветствуем любые отзывы на эту книгу. П ожалуйста, оставьте ваши

комментарии и предл ожения в опр осе, к от орый нах одится п о адресу http://

m icr osoft.comjlear n i ngjboo ksurvey.

Ваше участие п ом ожет Microsoft Press с оздавать книги, к оторые с оответствуют

вашим запр осам и ожиданиям.

П Р И М ЕЧАН И Е

Мы надеемся, что вы оставите в о п росе nодробный отзыв. Если у вас есть

вопросы о нашей издательской программе, вскоре выnускаемых кн игах или

же издательстве в целом, мы рады ответить на них в Твиттере: http:jjtwitter.

c o m/ M i cr o s oftPr e s s. Для вопросов относител ь н о и здан и я и с n ол ьзуйте

только вышеуказан ную электронную n очту.

1 8 Введение

От издателя перевода

Ваши замечания, предл ожения и в опросы отправляйте по адресу электр онной

п очты comp@piter.com ( издательств о 􀅐питер•, компьютерная редакция) .

Мы будем рады узнать ваше мнение!

П одр обную информацию о наших книгах вы найдете на веб-сайте издательства

http:jjwww.piter.com__