В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
Содержание:
Введение 1
ЧАСТЬ I. Общие сведения о языке C# и платформе .NET 4
ЧАСТЬ II. Язык программирования C# 22
ЧАСТЬ III. Программирование компоновочных блоков .NET 108
ЧАСТЬ IV. Программирование с помощью библиотек .NET 159
ЧАСТЬ V. Web-приложения и Web-сервисы XML 254
Примечания 294
Эндрю Троелсен
ЯЗЫК ПРОГРАММИРОВАНИЯ C# 2005 И ПЛАТФОРМА .NET 2.0 3-е издание
Посвящаю эту книгу моей матери, Мэри Троелсен. Мама! Благодарю тебя за поддержку в прошлом, настоящем и будущем. Ах, да! И спасибо за то, что ты не стала наказывать меня, когда я пришел домой с "ирокезом".
Люблю тебя. Пух.
Эндрю Троелсен (Andrew Troelsen) носит титул MVP (Most Valuable Professional – "самый ценный специалист") по Visual C# в Microsoft, а также является партнером, преподавателем и консультантом Intertech Training (), центра обучения разработчиков .NET и J2EE. Он является автором множества книг, среди которых Developer's Workshop to COM and ATL 3.0 (Wordware Publishing, 2000), COM and .NET Interoperability (Apress, 2002), Visual Basic .NET and the .NET Platform: An Advanced Guide (Apress, 2001), а также книга C# and the .NET Platform (Apress, 2003), которая была удостоена ряда специальных наград. Кроме того, он является автором множества статей по вопросам .NET для MSDN online и MacTech (в этих статьях рассматриваются различные аспекты межплатформенной независимости .NET) и часто выступает с докладами, посвященными .NET, в конференциях и группах пользователей.
В настоящее время Эндрю Троелсен проживает в Миннеаполисе, шт. Миннесота, со своей женой Амандой. В свободное время он мечтает о том, что Wild выиграют Кубок Стэнли, Vikings выиграют Суперкубок (он бы хотел, чтобы это произошло до его пенсии), a Timberwolves станут многократными чемпионами NBA.
Гэвин Смит (Gavin Smyth) является профессионалом в области программного обеспечения с многолетним (и, как он считает, слишком большим) опытом разработки программ – от драйверов различных устройств до приложений, предназначенных для многоузловых серверов на таких разных платформах, как "несгибаемые" операционные системы реального времени Unix и Windows, и таких языках программирования, как ассемблер, C++, Ada и C# (не считая множества других, не менее достойных языков). Он выполнял заказы для таких компаний, как ВТ и Nortel, а в настоящее время работает для Microsoft. Гэвин Смит имеет ряд собственных печатных работ, вышедших в научных издательствах (EXE и Wrox – где они сейчас?), но в какой-то момент он пришел к заключению, что критика чужих публикаций оказывается куда более плодотворной. Помимо этого, когда он не борется в своем саду с сорняками и насекомыми, он пытается заставить роботов LEGO делать то, что они, по его мнению, должны делать (это все исключительно ради детей – честно!).
Выпуск третьего издания этой книги был бы просто невозможен без поддержки и помощи многих окружающих меня людей, Во-первых, следует выразить благодарность всей команде издательства Apress. Каждый из ее членов приложил немало усилий, чтобы превратить мою "сырую" рукопись в безупречный продукт. Далее, я должен выразить признательность моему научному редактору, Гэвину Смиту (известному также под псевдонимом Eagle Eye – Орлиный Глаз), который выполнил огромную работу, чтобы уберечь меня от множества ошибок. Все оставшиеся ошибки (опечатки, неточности в программном коде и т.д.), которые смогли "пробраться" в эту книгу, конечно же, лежат на моей совести.
Спасибо моим друзьям и членам моей семьи, которые (в очередной раз) терпели мои цейтноты, а иногда и связанную с этим несдержанность в поведении. Такой же благодарности заслуживают мои друзья и сотрудники из Intertech Training. Я очень ценю оказанную вами поддержку (как прямую, так и косвенную). Наконец, отдельное спасибо и "все фантики" моей жене Мэнди за ее любовь и содействие.
Введение
Я помню время, много лет тому назад, когда я предложил издательству Apress книгу, посвященную еще не выпущенному на тот момент пакету инструментальных средств разработки под названием Next Generation Windows Services (NGWS - сервисы Windows следующего поколения). Вы, наверное, знаете, что пакет NGWS в конечном счете стал тем, что сегодня называется платформой .NET. Параллельно с моими исследованиями в области разработки языка программирования C# и платформы .NET шло создание начального варианта соответствующей рукописи. Это был фантастический проект, но я должен признаться, что писать о технологии, которая претерпевала весьма значительные изменения в ходе своей разработки, было занятием, очень действующим на нервы. К счастью, после многих бессонных ночей, где-то к началу лета 2001 года, первое издание книги C# and the .NET Platform было опубликовано почти одновременно с выходом .NET 1.0 Beta 2.
С того времени я был чрезвычайно рад и благодарен тому, что эта книга очень благосклонно принимается прессой и, самое главное, читателями. За эти годы книга предлагалась в качестве номинанта на премию Jolt Award (я тогда "пролетел"…) и на премию Referenceware Excellence Award 2003 года в категории книг по программированию (и я счастлив, что на этот раз мне повезло).
Второе издание этой книги ( C# end the .NET platform Second Edition ) дало мне возможность включить в нее материал, соответствующий версии 1.1 платформы .NET. Хотя второе издание книги содержало обсуждение множества новых тем, ряд глав и примеров включить в окончательный вариант книги вcе же не удалось.
Теперь, когда книга представлена в третьем издании, я с удовлетворением могу заявить, что она содержит (почти) все темы и примеры, которые я не смог представить в предыдущих изданиях. Это издание не только учитывает все многочисленные усовершенствования, предлагаемые в .NET 2.0, но включает и ряд глав, которые, будучи давно написанными, оставались до сих пор неопубликованными – это касается, например, описания CIL (Common Intermediate Language – общий про-межуточный язык).
Как и в предыдущих изданиях, в этом, третьем издании книги на основе простого и понятного материала представлены язык программирования C# и библиотеки базовых классов .NET. Я никогда не понимал склонность некоторых авторов в созданию технических книг, более похожих на руководство по подготовке к экзамену GRE, чем пригодный для чтения текст. Задачей этого нового издания по-прежнему остается предоставление вам информации, необходимой для построения программных решений сегодня, а не расточительная: трата времени на рассмотрение множества деталей, которые оказываются важными для очень узкого круга специалистов.
Вы и я – одна команда
Публикации разработчиков новых технологий предназначены для очень требовательной аудитории (я должен знать это не понаслышке – ведь я один из них). Построение программных решений для любой платформы требует чрезвычайной детализации и учета множества особенностей соответствующей отрасли, компании, клиентской базы, а также учета сути дела. Вы можете работать в электронном издательстве, разрабатывать системы для федерального или местного правительства, работать в NASA или каком-то оборонном ведомстве. Я, например, разрабатывал программное обеспечение для обучения детей, создавал различные N-звенные системы и участвовал в многочисленных проектах для медицинских и финансовых учреждений. С вероятностью почти 100 процентов тот программный код, который вы создаете на своем рабочем месте, не имеет никакой связи с программным кодом, который пишу я (если, конечно, нам случайно не приходилось работать вместе).
Поэтому в этой книге я сознательно избегаю примеров, в которых программный код связан со спецификой определенных отраслей производства или сфер программирования. Я пытаюсь описать возможности C#, объектно-ориентированного подхода, CLR и библиотек базовых классов .NET 2.0 с помощью примеров, не использующих такой специфики. Вместо того чтобы в каждом примере заполнять таблицы реальными данными, рассчитывать платежки или выполнять какие-то другие специальные вычисления, я буду рассматривать объекты, с которыми могут иметь дело все,- например, автомобили (с их геометрическими формами и служащими соответствующего предприятия, добавленными для полноты картины). И тут на сцену должны выйти вы.
Моей целью является как можно более понятное объяснение возможностей языка программирования C# и описание различных аспектов его применения в рамках платформы .NET. Я сделаю все, что будет в моих силах, чтобы вы, используя знания и навыки, полученные в процессе работы над этой книгой, могли продолжить дальнейшее освоение соответствующих технологий.
Вашей целью является освоение этой информации и применение ее к вашим конкретным задачам программирования. Я, конечно, понимаю, что ваши проекты вряд ли напрямую связаны с автомобилями, имеющими имена домашних любимцев, но так уж заведено в прикладных науках! Уверен, если вы поймете концепции платформы .NET, представленные в этой книге, то сможете предложить и реализовать решения, подходящие для вашей конкретной среды программирования.
Обзор содержимого книги
Книга Язык программирования C# 2005 и платформа .NET 2.0, 3-е издание делится на пять логически обособленных разделов, каждый из которых состоит из глав, тем или иным образом связанных между собой. Если вы имели возможность ознакомиться с одним из предыдущих изданий этой книги, вы сможете заметить некоторое сходство в названиях ряда глав, но знайте, что здесь почти на каждую страницу был добавлен новый материал и дополнительные примеры. Вы можете также заметить, что некоторые темы, также освещенные в первом и втором изданиях (например, сериализация объектов и сборщик мусора .NET), здесь представлены в виде отдельных глав.
Кроме того, и вы вправе это ожидать, третье издание книги содержит несколько глав с совершенно новым материалом (в частности главу, посвященную синтаксису и семантике CIL) и подробное описание специфических возможностей .NET2.0. Теперь, после всех сделанных оговорок, мы перейдем к краткой характеристике содержимого книги по частям и главам.
Часть 1. Общие сведения о языке C# и платформе .NET
Целью этой части книги является описание базовых принципов функционирования платформы .NET, системы типов .NET я различных инструментальных средств разработки, используемых при создании приложений .NET (многие из таких инструментальных средств являются программными продуктами с открытым исходным кодом). Здесь же представлены базовые возможности языка программирования C#.
Глава 1. Философия .NET
Материал этой главы является фундаментом для понимания всего остального материала книги. Глава начинается с обсуждения традиционных возможностей разработки программ в среде Windows и указывает на недостатки этого, использовавшегося ранее подхода. Но главной целью данной главы является знакомство с набором "строительных блоков" .NET, таких как CLR (Common Language Runtime – общеязыковая среда выполнения), CIS (Common Type System – общая система типов), CLS (Common Language Specification – общеязыковые спецификации) и библиотеки базовых классов. Здесь же предлагается вводная информация о языке программирования C# и формате компоновочных блоков .NET, рассматриваются межплатформенная независимость, вытекающая из самой природы платформы .NET, и роль CLI (Common Language Infrastructure – общеязыковая инфраструктура).
Глава 2. Технология создания приложений на языке C#
В этой главе предлагается краткое описание процесса компиляции и отладки файлов исходного кода для программ, написанных на языке C#, а также обсуждаются соответствующие инструменты и технологии. Сначала вы узнаете, как использовать компилятор командной строки (csc.exe) и файлы ответных сообщений C#, После этого будут рассмотрены некоторые из множества пакетов, предлагающих интегрированную среду разработки, – это, в частности, TextPad, SharpDevelop. Visual C# 2005 Express и (конечно же) Visual Studio 2005. Тут же будет представлен ряд аналогичных пакетов с открытым исходным водом (Vil, NAnt. NDoe и т.д.). которые на всякий случай должен иметь любой разработчик .NET.
Часть II. Язык программирования C#
В этой части исследуются основные возможности языка программирования C#, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, Кроме того, часть II познакомит вас с элементами CTS (классы, интерфейсы, структуры, перечни и делегаты) и конструкциями общих типов.
Глава 3. Основы языка C#
В этой главе рассматриваются базовые конструкции языка программирования C#. Вы освоите технику построения классов, выясните разницу между типами, характеризуемыми значениями, и ссылочными типами, приведением к объектному типу и восстановлением из "объектного образа", а также роль любимого всеми базового класса System.Object. В этой же главе показано, как платформа .NET заставляет работать самые простые программные конструкции, такие как перечни, массивы и обработчики строк. Наконец, в этой главе рассматривается ряд специфических для версии 2.0 вопросов, включая типы данных, для которых имеется разрешение принимать значение null.
Глава 4. Язык C# 2.0 и объектно-ориентированный подход
Целью главы 4 является выяснение того, как язык C# сочетается с базовыми принципами ООП – инкапсуляцией, наследованием и полиморфизмом. После рассмотрения ключевых слов и синтаксиса, используемых при построении иерархии классов, будет выяснена роль XML-комментариев в программном коде.
Глава 5. Цикл существования объектов
В этой главе выясняется, как в рамках CLR с помощью сборщика мусора .NET организовано управление памятью. В этой связи вы узнаете о роли корней приложения, генераций объектов и типа System.GC. После изучения базовых вопросов в оставшейся части главы будут рассмотрены тема объектов, предусматривающих освобождение ресурсов (через интерфейс IDisposable), и процесс финализации (реализуемый с помощью метода System.Object.Finalize()).
Глава 6. Структурированная обработка исключений
В этой главе обсуждается структурированный подход к обработке исключений (т.е. исключительных ситуаций), которые могут возникать в среде выполнения. Вы узнаете о ключевых словах языка C# (try, catch, throw и finally), которые позволяют решать соответствующие проблемы, а также выясните разницу между исключениями системного уровня и уровня приложения. Дополнительно в главе обсуждаются специальные средства Visual Studio 2005, призванные упростить задачу выявления и обработки исключений, ускользнувших от вашего внимания.
Глава 7. Интерфейсы и коллекции
Материал этой главы опирается на понимание принципов разработки приложений с использованием объектов и охватывает вопросы программирования на базе интерфейсов. Вы узнаете, как определить типы, поддерживающие множество элементов поведения, как найти эти элементы поведения во время выполнения и как выборочно скрыть такие элементы поведения, используя явную реализацию интерфейса. В оставшейся части главы рассматривается пространство имен System. Collections, с помощью которого демонстрируется польза типов интерфейса.
Глава 8. Интерфейсы обратного вызова, делегаты и события
Цель главы 8 заключается в разъяснении типа делегата. Упрощенно говоря, делегат .NET – это шаблон, "указывающий" на методы в приложении. С помощью такого шаблона вы получаете возможность строить системы, в которых множество объектов могут быть связаны двусторонним обменом- После выяснения возможностей использования делегатов.NET (включая множество возможностей, появившихся с версией 2.0, – например, анонимные методы) в главе рассматривается ключевое слово C# event, которое используется для того, чтобы упростить процесс программирования с помощью делегатов.
Глава 9. Специальные приемы построения типов
Эта глава позволит вам глубже понять возможности языка программирования C# путем изучения более совершенных методов программирования. Вы узнаете, как использовать перегрузку операций и создавать пользовательские программы преобразования (явного или неявного), как строить индексаторы типов и работать c указателями C-типа в файле *.cs.
Глава 10. Обобщения
В свази с разработкой .NET 2.0 язык программирования C# был расширен с целью поддержки новой возможности CTS, связанной с так называемыми обобщениями (generics). Вы увидите, что программирование с помощью обобщений ускоряет процесс создания приложений и обеспечивает типовую безопасность. Здесь рассмотрены различные обобщенные типы из пространства имен System, Collections.Generic, а также показано, как строить свои собственные обобщенные методы и типы (как с ограничениями, так и без таковых).