Книга известных специалистов в области разработки приложений с использованием .NET Framework посвящена программированию на языке C# в среде новой версии .NET Framework 2.0. Книгу отличает простой и доступный стиль изложения, изобилие примеров и множество рекомендаций по написанию высококачественных программ. Подробно рассматриваются такие вопросы, как основы языка программирования C#, организация среды .NET, работа с данными, создание Windows- и Web-приложений, взаимодействие через сеть, создание Web-служб и многое другое. Немалое внимание уделено проблемам безопасности и сопровождения кода. Тщательно подобранный материал позволит без труда разобраться с тонкостями использования Windows Forms и Web Forms. Читатели ознакомятся с работой в Visual Studio .NET, а также с применением таких технологий, как COM, ADO.NET, ASP.NET и GDI+. Прилагаемый к книге компакт-диск содержит исходные коды всех примеров, что существенно упростит освоение материала.
Книга рассчитана на программистов разной квалификации, а также будет полезна для студентов и преподавателей дисциплин, связанных с программированием и разработкой для .NET.
Кристиан Нагель - архитектор программного обеспечения и разработчик один из партнеров Thinktecture, занимается тренингами и консалтингом по дизайну и разработке решений Microsoft .NET. Имеет за плечами более, чем 15-летний опыт разработчика и программного архитектора. Кристиан начинал свою компьютерную карьеру на системах PDP11 и VAX/VMS, и работал на множестве языков и платформ. Начиная с 2000 года, когда появилась предварительная версия .NET, он работает с различными технологиями .NET над построением распределенных решений. Обладая фундаментальными знаниями технологий Microsoft, является автором ряда книг по .NET; имеет сертификаты Microsoft Certified Trainer (MCT), Solution Developer (MCSD) и System Engineer (MCSE); является региональным директором Microsoft (Microsoft Regional Director) и MVP по Visual C#. Выступает с докладами на международных конференциях (TechED, DevDays, VCDC), выполняет обязанности регионального менеджера INETA Europe (Международная организация групп пользователей .NET), поддерживающего группы пользователей .NET. Связаться с Кристианом можно через Web-сайты http://www.christiannagel.com и http://www.thinktecture.com.
Билл Ивджен - активный сторонник технологий .NET и инициатор учебных программ сообществ разработчиков .NET. Интенсивно занимается .NET, начиная с его первых шагов, с 2000 года. С тех пор является президентом группы пользователей .NET Сент-Луиса (http://www.stlusergroups.org). Билл также является основателем и исполнительным директором Международной Ассоциации .NET (http://www.ineta.org), в которую входит более 125000 членов со всего мира. Проживая в Сент-Луисе, Миссури, США, Билл является известным автором и лектором по теме ASP.NET и XML Web-служб. Его перу принадлежат издания: XML Web Services for ASP.NET, Web Services Enhancements: Understanding the WSE for Enterprise Applications, Visual Basic .NET Bible, and ASP.NET Professional Secrets (все изданы Wiley). Билл - технический директор Reuters, - международного агентства новостей и финансовых служб. Окончил Университет Западного Вашингтона в Беллингеме, Вашингтон по специальности русский язык. Вы можете обратиться к Биллу по адресу evjen@yahoo.com.
Джей Глинн начал писать программы около 20 лет назад, разрабатывал программы для операционной системы PICK на языке PICK basic. С тех пор писал на Paradox PAL, Object PAL, Delphi, VBA, Visual Basic, C, C++, Java и, конечно, на C#. В настоящее время является координатором проектов и архитектором в крупной финансовой компании в Нэшвилле, Теннесси, работая над программным обеспечением для платформы TabletPC. Связаться с ним можно по адресу jlsglynn@hotmail.com.
Карли Ватсон - независимый автор и технический директор компании 3form.Ltd. Несмотря на то, что начинал с изучения нано-физики, привлеченный хорошими заработками в компьютерной области, сменил специальность. С тех пор написал ряд книг по .NET и связанным технологиям, SQL, мобильным вычислениям, а также ряд новелл, которые еще готовятся к выходу в свет (но не связаны с компьютерами). Карли можно узнать по разноцветной одежде, поскольку он - энтузиаст сноуборда, а еще он все еще хочет завести кота.
Морган Скиннер начинал свою компьютерную карьеру еще в подростковом возрасте, в школе, на Sinclair ZX80, когда пришел в восторг, увидев код, написанный учителем и увлекся программированием на ассемблере. После того, как он "подсел" на Z80 (который, как он считает, устроен намного лучше, чем эти жалкие 3 регистра на 6502), постепенно перешел от школьного ZX81 к собственному ZX Spectrum.
С тех пор перепробовал множество языков и платформ, включая VAX Macro Assembler, Pascal, Modula2, Smalltalk, язык ассемблера X86, PowerBuilder, C/C++, VB и, наконец, в настоящее время - C#. Программирует на .NET, начиная с релиза PDC 2000 года. Ему это так понравилось, что в 2001 году присоединился к Microsoft. Сейчас работает в подразделении Первичной Поддержки Разработчиков, и большую часть времени тратит на оказание помощи с C#.
Обратиться к Моргану можно по адресу http://www.morganskinner.com.
За плечами Аллена Джонса 15-летняя карьера, охватывающая широкий диапазон IT-дисциплин, включая менеджмент систем уровня предприятия, архитектурные решения уровня предприятия, управление проектами. Однако разработка программного обеспечения всегда было его страстью. Аллен занимается разработкой и архитектурой решений на базе Microsoft Windows, начиная с 1990 года, включая разнообразные системы электронной коммерции, торговые и системы безопасности.
Аллен является соавтором четырех популярных книг по .NET, включая C# Programmer's Cookbook (Microsoft Press) и Programming .NET Security (O'Reilly). Активно участвует в разработке учебных курсов Microsoft Learning по новым технологиям .NET.
Если мы скажем, что язык С# и связанная с ним среда .NET Framework является одной из самых важных технологий для разработчиков за много лет, это не будет преувеличением. .NET спроектирована как новая среда, в рамках которой можно разработать практически любое приложение для Windows, в то время как С# - новый язык программирования, предназначенный специально для работы с .NET. С помощью С# вы можете, например, создать динамическую Web-страницу, Web-службу XML, компонент распределенного приложения, компонент доступа к базе данных, классическое настольное приложение Windows или даже интеллектуальное клиентское приложение, имеющее средства онлайновой и автономной работы. Настоящая книга посвящена .NET Framework 2.0 - третьему выпуску этой среды. Если вы имеете опыт кодирования для версий 1.0 и 1.1, то, возможно, встретите разделы, в которых для вас не будет ничего нового. Мы старались специально отмечать те элементы, которые впервые появились в .NET Framework 2.0.
Пусть вас не смущает марка ".NET". Часть "NET" в имени подчеркивает веру Microsoft в то, что распределенные приложения, в которых обработка распределена между клиентом и сервером - это шаг вперед, но С# - не только язык для написания Internet-приложений или любых сетевых приложений. Он предоставляет средства для кодирования программного обеспечения практически любого типа или компонентов, которые может понадобиться написать для платформы Windows. И С#, и .NET призваны перевернуть способ написания программ, и сделать программирование для Windows намного легче, чем оно когда-либо было.
Это довольно самонадеянное утверждение, и оно требует доказательств. В конце концов, мы все знаем, насколько быстро меняются компьютерные технологии. Каждый год Microsoft выпускает новое программное обеспечение, инструменты программирования, версии Windows, при этом утверждая, что они в высшей степени хороши для разработчиков. Так в чем же отличие .NET и С#?
Чтобы понять истинное значение .NET, полезно вспомнить природу многих технологий Windows, которые появились за последние десять лет или около того. Хотя внешне они могут показаться совсем непохожими, но все операционные системы, начиная с Windows 3.1 (представленной в 1992 году), и до Windows Server 2003, имеют в своем ядре один и тот же программный интерфейс Windows API. С каждой новой версией Windows огромное число новых функций добавляется к этому API, но все это - процесс эволюции и расширения API, а не замена его.
То же самое можно сказать о многих новых технологиях и средах (каркасах), которые мы использовали для разработки программного обеспечения Windows. Например, о модели COM (Component Object Model - Объектная модель компонентов), изначально возникшей как OLE (Object Linking and Embedding - связывание и встраивание объектов). Во время ее появления она была просто средством, с помощью которого можно было связывать разные типы документов Office, так что, например, вы могли поместить небольшую таблицу Excel в документ Word. Затем она эволюционировала до COM, DCOM (Distributed COM - распределенная СОМ) и в конечном итоге появилась СОМ+ - развитая технология, формирующая базу для взаимодействия почти всех компонентов, также реализующая транзакции, службы сообщений и пулы объектов.
Microsoft выбрала этот эволюционный подход к программному обеспечению по очевидной причине - заботясь об обратной совместимости. За многие годы независимыми разработчиками для Windows был разработан гигантский объем программного обеспечения, и Windows не достигла бы такого успеха, если бы всякий раз, когда Microsoft представляла новую технологию, существующая кодовая база переставала бы работать!
В то время как обратная совместимость всегда была важнейшим свойством технологий Windows и одной из сильных сторон платформы Windows, она также имела большой недостаток. Всякий раз, когда технология развивалась и добавлялись новые средства, это приводило к усложнению по сравнению с тем, что было раньше.
Стало ясно, что нужно что-то менять. Microsoft не могла до бесконечности расширять существующие средства разработки и языки, постоянно все более усложняя их, чтобы удовлетворить противоречивые требования поддержки нового оборудования и обратной совместимости с тем, что было в те времена, когда Windows впервые стала популярной - в начале 90-х прошлого века. Наступил момент, когда нужно было начать с чистого листа, имея простой, но достаточный набор языков, сред и средств разработки, которые позволили бы разработчиками легко писать полезное и работоспособное программное обеспечение.
Таким "свежим стартом" стали С# и .NET. Грубо говоря, .NET - это каркас, API-интерфейс для программирования на платформе Windows. Вместе с .NET Framework, С# представляет собой язык, спроектированный "с нуля", предназначенный для работы с .NET и впитавший в себя все достижения прогресса сред разработки и понимание принципов объектно-ориентированного программирования, которое выкристаллизовалось за последние 20 лет.
Прежде чем продолжить, следует пояснить, что обратная совместимость вовсе не была утеряна. Существующие программы продолжают работать, и .NET спроектирован так, что способен работать с этим существующим программным обеспечением. В настоящее время коммуникации между программными компонентами Windows почти целиком строятся с использованием СОМ. Принимая это во внимание, .NET представляет оболочки вокруг существующих компонентов СОМ, так что компоненты .NET могут свободно общаться с ними.
Правда, вы не обязаны изучать С#, чтобы писать код для .NET. Microsoft предлагает расширенный C++, еще один новый язык, называемый J#, а также вносит существенные изменения в Visual Basic, превратив его в более мощный язык - Visual Basic .NET, чтобы позволить на любом из этих языков разрабатывать приложения, ориентированные на среду .NET. Однако все эти языки скорее представляют собой результат эволюции в течение ряда лет, и не разработаны изначально с учетом требований современных технологий.
Эта книга научит вас программировать на С#, одновременно закладывая необходимый фундамент знаний о работе архитектуры .NET. Мы не только раскроем основы языка С#, но также представим примеры приложений, использующих широкий диапазон взаимосвязанных технологий, включая доступ к базам данных, динамические Web-страницы, расширенную графику и доступ к каталогам. Единственное требование - чтобы вы были знакомы хотя бы с одним из других высокоуровневых языков программирования, используемых в Windows - C++, Visual Basic или J++.
Мы уже говорили в общих чертах о том, насколько замечателен .NET, но пока не сказали ничего о том, как он облегчает жизнь вам как разработчику. В этом разделе мы кратко опишем некоторые усовершенствованные средства .NET.
Повышенная безопасность - каждая сборка также может содержать встроенную информацию безопасности, которая в точности описывает, кому и каким категориям пользователей или процессов какие методы каких классов разрешено вызывать. Это обеспечивает очень высокую степень контроля за тем, как могут использоваться сборки, которые вы поставляете.
Более подробно преимущества .NET рассматриваются в главе 1.
Первая версия .NET Framework (1.0) была реализована в 2002 году с огромным энтузиазмом. Последняя версия - .NET Framework 2.0, была представлена в 2005 году и рассматривается как главный выпуск этой среды.
В каждом выпуске Microsoft всегда старается обеспечить сохранение работоспособности ранее разработанного кода. До сих пор им удавалось успешно достигать этой цели.
СОВЕТ Создайте установочный сервер, чтобы полностью протестировать обновления выших приложений .NET Framework 2.0 вместо простого обновления для работающих приложений. |
Ниже мы детализируем некоторые изменения, внесенные в .NET Framework, a также дополнения Visual Studio 2005 - среды разработки для .NET Framework 2005.
После долгого перерыва наконец-то вышла последняя версия SQL Server. Эта версия, SQL Server 2005, во многих отношениях особенная. Для разработчика .NET важнее всего то, что .NET Framework 2.0, Visual Studio 2005 и SQL Server 2005 теперь тесно между собой связаны - в том смысле, что реализованы в сочетании. Это достаточно важно, поскольку известно, что большинство приложений строятся с применением этих всех трех частей, и что они должны обновляться совместно, чтобы работать друг с другом в прозрачной согласованной манере.
Благодаря тому факту, что теперь сам SQL Server 2005 служит хостом для CLR (Common Language Runtime - общеязыковая исполняющая среда), можно избежать построения аспектов ваших приложений, связанных с базами данных, с применением языка T-SQL. Вместо этого можно строить такие элементы, как хранимые процедуры, триггеры и даже типы данных, на любом совместимом с .NET языке, например, на С#.
SQL Server Express - это версия SQL Server 2005 года, которая заменила MSDE. Эта версия лишена тех строгих ограничений, которые были присущи MSDE.
Большая часть программирования в наши дни выполняется на 32-разрядных машинах. Это было огромным шагом вперед в разработке приложений, когда компьютеры из 16-разрядных превратились в 32-разрядные. Но все больше и больше предприятий переходят на самые современные 64-разрядные серверы от таких компаний, как Intel (с процессорами Itanium) и AMD (с процессорами х64), и .NET Framework 2.0 теперь включает 64-разрядную поддержку такой миграции.
Специалисты Microsoft интенсивно трудились над тем, чтобы все, что вы строите в 32-разрядном мире .NET, работало в мире 64-разрядном. Это значит, что на все, что вы делаете с SQL Server 2005 или ASP.NET никак не повлияет переход на 64-разрядные машины. Было внесено множество изменений в CLR, чтобы заставить работать 64-разрядную версию .NET. Изменения коснулись таких вещей, как сборка мусора (чтобы обрабатывать большие объемы данных), процесс компиляции JIT, обработка исключений и многое другое.
Переход на 64-разрядную архитектуру предоставляет вам некоторые значительные преимущества. Наиболее важно (и это - самая очевидная причина), что 64-разрядные сервера предлагают большее адресное пространство. Переход на 64 бита также позволяет сделать примитивные типы большими, чем раньше. Например, целое значение 232 дает 4 294 967 296, в то время как 264 - уже 18 446 744 073 709 551 616. Это очень удобно для тех приложений, которым нужно вычислять такие вещи, как государственный долг США или другие большие числа.
Такие компании, как Microsoft и IBM, подталкивают своих клиентов обратить внимание на 64-разрядные системы. Одними из главных областей применения являются средства баз данных и средства виртуального хранения - именно здесь переход на 64-разрядную архитектуру наиболее оправдан.
Visual Studio 2005 можно инсталлировать и запустить на 64-разрядном компьютере. Среда IDE Visual Studio 2005 включает в себя и 32-разрядный, и 64-разрядный компиляторы. Одно предупреждение: 64-разрядный .NET Framework предназначен только для Windows Server 2003 SP1 или выше либо для других 64-разрядных операционных систем Microsoft, которые могут появиться в будущем.
Когда вы строите ваше приложение на Visual Studio 2005, то можете изменять свойства проекта так, чтобы оно было скомпилировано специально для 64-разрядных компьютеров. Чтобы найти эти настройки, следует обратиться открыть окно свойств приложения и перейти в нем на вкладку Build (Построение). На вкладке Build щелкните на кнопке Advanced (Дополнительно), после чего появится диалоговое окно Advanced Compiler Setting (Дополнительные настройки компилятора). В этом окне, в нижней его части можно изменит тип целевого процессора. Отсюда вы можете установить, чтобы ваше приложение было построено либо для 64-разрядного компьютера Intel, либо 64-разрядного компьютера AMD.
Чтобы сделать коллекции более мощным средством и также повысить их эффективность и удобство, в .NET Framework 2.0 были представлены обобщения (generics). Это нововведение означает, что такие языки, как С# и Visual Basic 2005, теперь могут строить приложения, использующие обобщенные типы. Идея обобщений не нова. Они выглядят подобно шаблонам C++, хотя несколько отличаются от них. Обобщения можно найти и в других языках, например, в Java. Их появление в языках .NET Framework 2.0 выглядит как ценный подарок пользователям.
Обобщения позволяют создавать обобщенные коллекции, которые, тем не менее, строго типизированы - что оставляет меньше шансов допустить ошибку (потому что они выявляются во время компиляции), повышает производительность и предоставляет в ваше распоряжение средства IntelliSense (автоматическое завершение конструкций кода), когда вы работаете с коллекциями.
Чтобы применить обобщения в вашем коде, необходимо обратиться к пространству имен System.Collections.Generic. Это откроет доступ к обобщенным версиям классов Stack, Dictionary, List и Queue.
Рассмотрим пример, демонстрирующий использование обобщенной версии класса Stack:
void Page_Load( object sender, EventArgs e ) { System.Collections.Generic.Stack<string> myStack = New System.Collections.Generic.Stack<string>(); myStack.Push( "St. Louis Rams" ); myStack.Push( "Indianapolis Colts" ); myStack.Push( "Minnesota Vikings" ); Array myArray; myArray = myStack.ToArrayO; foreach( string item in myArray ) { Labell.Text += item + "<br />"; } } |
В этом примере класс Stack явно приведен, чтобы содержать в себе элементы типа string. Здесь вы специфицируете тип коллекции с применением угловых скобок. То есть, в этом примере класс Stack приводится к типу string с использованием синтаксиса Stack<string>. Если вы захотите привести его к чему-то другому, отличному от класса Stack элементов string (например, элементов int), то должны будете специфицировать Stack<int>.
Поскольку коллекция элементов в классе Stack приведена к специфическому типу непосредственно при создании класса Stack, нет необходимости приводить его элементы к типу object и позднее (в цикле foreach) - обратно к типу string. Этот процесс называется упаковкой и обходится недешево. Поскольку в этом коде типы специфицированы заранее, возрастает производительность работы с коллекцией.
В дополнение к сказанному о различных типах коллекций, вы также можете использовать обобщения с классами, делегатами, методами и тому подобным. Механизм обобщений детально раскрыт в главе 10.
Анонимные методы позволяют вам включить программный код внутрь делегата, так что его можно выполнить позднее вместо создания совершенно нового метода. Например, если вы не используете анонимные методы, то должны применять делегат в манере, подобной следующему:
public partial class Default_aspx { void Page_Load( object sender, EventArgs e ) { this.Buttonl.Click += ButtonWork; } void ButtonWork( object sender, EventArgs e ) { Labell.Text = "Вы щелкнули на кнопке!"; } } |
Однако с помощью анонимных методов можно поместить необходимое действие непосредственно в делегат, как показано в следующем примере:
public partial class Default_aspx { void Page_Load( object sender, EventArgs e ) { this.Buttonl.Click += delegate( object myDelSender, EventArgs itryDelEventArgs ) { Label1.Text = "Вы щелкнули на кнопке!"; }; } } |
Используя анонимные методы, нет необходимости создавать отдельный метод. Вместо этого необходимый код помещается непосредственно после объявления делегата. Предложения и шаги, которые должны быть выполнены делегатом, помещаются между фигурными скобками и завершаются точкой с запятой.
Благодаря появлению обобщений в основе .NET Framework 2.0 стало возможно создавать типы, допускающие null-значения - используя System.Nullable<T>. Это идеальное решение для ситуаций, когда, например, нужно создавать наборы элементов типа int, в которых могут содержаться значения null. Раньше всегда было трудно создать int со значением null изначально, или же присваивать null переменным int.
Чтобы создать допускающий null тип int, вы должны использовать следующий синтаксис:
System.Nullable<int> x = new System.Nullable<int>; |
Появился также новый модификатор типа, который также объявлять тип как допускающий значения null. Это показано в следующем примере:
int? salary = 800000
|
Такая способность объявлять типы, допускающие null, не является исключительным свойством С#, поскольку встроена в .NET Framework и стала возможной благодаря появлению средства обобщений в .NET. По этой причине вы также найдете типы, допускающие null, и в Visual Basic 2005.
Итераторы позволяют использовать циклы foreach с вашими собственными пользовательскими типами. Чтобы достичь этого, необходимо, чтобы ваш класс реа-лизовывал интерфейс IEnumerable, как показано ниже:
using System; using Systm.Collections; public class myList { internal object[] elements; internal int count; public IEnumerator GetEnumerator() { yield return "St. Louis Rams"; yield return "Indianapolis Colts"; yield return "Minnesota Vikiings"; } } |
Чтобы использовать интерфейс IEnumerable, необходимо сослаться на пространство имен System.Collections. Имея все это, вы можете выполнять итерации по своему пользовательскому классу, как показано здесь:
void Page_Load( object sender, EventArgs e ) { myList IteratorList = new myList(); foreach( string item in IteratorList ) { Response.Write( item.ToStringO + "<br />" ); } } |
Частичные (partial) классы - новое средство .NET Framework 2.0, и С# опять использует преимущества этого нововведения. Частичные классы позволяют вам разделить один класс на множество файлов, которые позднее, при компиляции, комбинируются в единый класс.
Чтобы объявить частичный класс, нужно просто использовать ключевое слово partial в любых классах, которые должны объединяться с другими, формируя единый класс. Ключевое слово partial предшествует имени класса, который комбинируется с оригинальным классом. Например, у вас может быть простой класс Calculator, объявленный следующим образом:
public class Calculator { public int Add( int a, int b ) { return a + b; } } |
С этого момента вы можете создать второй класс, который присоединится к первому, как показано ниже:
public partial class Calculator { public int Subtract( int a, int b ) { return a - b; } } |
При компиляции эти классы будут собраны вместе в единый класс Calculator, как если бы они изначально составляли единое целое.
В определенном смысле С# по отношению к языкам программирования представляет собой то же самое, что .NET по отношению к среде Windows. Точно так же, как Microsoft добавляла все больше и больше средств к Windows и Windows API в течение последнего десятилетия, так и Visual Basic 2005 и C++ подвергались постоянному расширению. Хотя Visual Basic и C++ в результате этого стали весьма мощными языками, оба они страдают от проблем, связанных с "тяжелым наследием" их эволюции.
В случае Visual Basic 6 и более ранних версий сильная сторона языка определялась тем фактом, что его было легко понять, и он значительно облегчал решение многих задач программирования, скрывая детали Windows API и инфраструктуру компонентов СОМ от разработчика. Отрицательная же сторона состояла в том, что Visual Basic никогда не был по-настоящему объектно-ориентированным, так что крупные приложения быстро теряли организацию, и их становилось трудно сопровождать. К тому же, поскольку синтаксис Visual Basic был унаследован от ранних версий BASIC (который, в свою очередь, был задуман скорее как простой для понимания начинающими программистами язык, нежели для написания крупных коммерческих приложений), на самом деле он не был приспособлен для построения хорошо структурированных объектно-ориентированных программ.
С другой стороны, C++ имеет корни в определении языка ANSI C++. Он не полностью совместим со стандартом ANSI (хотя и близок к нему) по той простой причине, что Microsoft впервые разработала свой компилятор C++ до того, как определение ANSI стало официальным. К сожалению, это привело к двум проблемам. Во-первых, корни ANSI C++ лежат в технологиях двадцатилетней давности, поэтому ему не хватает поддержки современных концепций (таких как строки Unicode и генерация XML-документации), и он содержит некоторые архаичные синтаксические структуры, предназначенные для компиляторов прошлых лет (такие как отделение объявления от определения функций-членов). Во-вторых, разработчики Microsoft одновременно пытаются развивать C++, чтобы он стал языком, предназначенным для выполнения высокопроизводительных задач под Windows, а потому вынуждены были добавить к нему огромное число специфичных для Microsoft ключевых слов и разнообразных библиотек. В результате язык C++ для Windows стал чрезвычайно "путанным". Попробуйте спросить разработчиков C++, сколько определений строковых типов они знают: char*, LPTSTR, string, CString (версия MFC), CString (версия WTL), wchar_t*, OLECHAR* и так далее и тому подобное...
Теперь появилась .NET - полностью новая среда, которая повлекла за собой появлением новых расширений обоих языков. Microsoft добавила еще больше специфичных ключевых слов с C++, и провела полную реконструкцию Visual Basic, создав Visual Basic .NET, Visual Basic 2005 - язык, который унаследовал некоторый базовый синтаксис VB, но дизайн которого полностью отличается от того, к чему мы привыкли; он практически стал совершенно новым языком.
В упомянутом контексте Microsoft решила предложить разработчикам альтернативу - язык, спроектированный специально для .NET, к тому же спроектированный с чистого листа. В результате появился Visual C# 2005. Официально Microsoft описывает С# как "простой, современный, объектно-ориентированный и безопасный к типам язык программирования, унаследованный от С и C++". Большинство независимых обозревателей, вероятно, изменили бы это на "унаследованный от С, C++ и Java". Такое описание является технически точным, но мало что говорит о красоте и элегантности языка. Синтаксически С# очень похож на C++ и Java, в том смысле, что многие ключевые слова - те же, кроме того, С# также разделяет с языками C++ и Java ту же блочную структуру с фигурными скобками для выделения блоков кода и точками с запятой для завершения операторов. Первое впечатление от фрагмента кода С# состоит в том, что он выглядит, как C++ или Java. Но, несмотря на это внешнее сходство, С# изучить намного легче, чем C++, и по сложности освоения он примерно равен
Java. Его дизайн в большей степени соответствует современным инструментам разработки, чем оба эти его предшественника, и представляет легкость в использовании Visual Basic вместе с высокой производительностью и низкоуровневым доступом к памяти, характерными для C++, когда это необходимо. Среди возможностей С# необходимо особо отметить следующие:
Большая часть перечисленного также касается Visual Basic 2005 и управляемого C++. Тот факт, что С# изначально спроектирован для работы с .NET, однако, означает, что он поддерживает средства .NET в более полной мере, и предлагает в этом контексте более подходящий синтаксис, чем эти прочие языки. Хотя язык С# сам по себе очень похож на Java, есть несколько существенных преимуществ. В частности, Java не предназначен для работы в среде .NET.
Прежде чем завершить тему, следует отметить и ряд ограничений С#. Одна область, для которой данный язык не предназначен - это критичный по времени или исключительно высокопроизводительный код - когда приходится заботиться о том, чтобы цикл занимал 1000 или 1050 тактов процессора, когда необходимо очищать ресурсы в течение миллисекунд после того, как отпадает потребность в них. Вероятно, C++ продолжает оставаться самым непревзойденным из высокоуровневых языков в этой области. С# недостает некоторых ключевых средств для построения наиболее высокопроизводительных приложений, включая возможность специфицировать встроенные функции и деструкторы, которые гарантированно запускаются в определенной точке кода. Однако пропорциональное отношение таких приложений к их общему числу чрезвычайно низко.
.NET Framework работает под управлением Windows 98, 2000, ХР и 2003. Чтобы писать код, используя .NET, необходимо инсталлировать .NET SDK, если только вы не используете Windows Server 2003, который поставляется с предустановленной средой .NET Framework 1.0 и 1.1. Если вы собираетесь работать с примерами, представленными в этой книге, то потребуется инсталлировать .NET Framework 2.0, даже если вы работаете в среде Windows Server 2003. По умолчанию .NET Framework 2.0 не включена в этот сервер.
К тому же, если только вы не собираетесь писать ваш код С#, используя текстовый редактор или некоторую среду разработки от независимых поставщиков, то почти наверняка захотите установить Visual Studio 2005. Полный SDK не требуется, чтобы выполнять управляемый код, но среда исполнения .NET необходима. Возможно, вам понадобится поставлять ее вместе с вашим кодом для тех клиентов, у которых она еще не установлена.
В главе 1 этой книги мы представим обзор общей архитектуры .NET, чтобы подготовить почву, которая нужна для разработки управляемого кода. Далее книга организована в виде набора разделов, в которых описывается как сам язык С#, так и его применение во многих областях.
Часть I. Язык С#
Эта часть закладывает хороший фундамент знаний о самом языке С#. Она не предполагает знания какого-либо конкретного языка, хотя предполагается, что вы - опытный программист. Мы начнем с обзора базового синтаксиса С# и его типов данных, а затем обсудим объектно-ориентированные возможности С#, после чего можно будет перейти к более сложным темам программирования на С#.
Часть II. Среда .NET
В этой части рассматриваются принципы программирования в среде .NET. В частности, описываются концепции Visual Studio .NET, безопасности, многопоточности приложений .NET и объясняется, как генерировать собственные библиотеки в виде сборок.
Часть III. Данные
Здесь рассматривается доступ к базам данных средствами ADO.NET и взаимодействие с каталогами Active Directory. Также подробно раскрывается поддержка .NET технологии XML на стороне операционной системы Windows, а также средства .NET, встроенные в SQL Server 2005.
Часть IV. Windows-приложения
Эта часть сосредоточена на построении классических приложений Windows, которые называются в .NET Windows Forms. Windows Forms представляют собой версии приложений "толстого клиента", а применение .NET для их построения - простой и быстрый способ решения этой задачи. В дополнение к рассмотрению Windows Forms также рассматривается GDI+ - технологию, используемую для построения приложений, работающих с расширенной графикой.
Часть V. Web-приложения
В этой части раскрываются компоненты, работающие на Web-сайтах, доставляющие Web-страницы. Сюда входит огромный объем новых средств, предлагаемых ASP.NET 2.0.
Часть VI. Коммуникации
Эта часть посвящена коммуникациям. Здесь описываются Web-службы, применяемые для коммуникаций, независящих от платформы, .NET Remoting - для коммуникаций между клиентами и серверами .NET, Enterprise Services (службы уровня предприятия) - для служб, работающих в фоновом режиме и коммуникаций DCOM. На примере системы асинхронных сообщений показаны коммуникации в отключенном режиме. Глава 32 подготовит вас к будущему, так что вы сможете делать правильный выбор, отдавая предпочтение тем или иным технологиям коммуникаций в своих решениях.
Часть VII. Способность к взаимодействию
Обратная совместимость с СОМ - важная часть .NET. Слишком много СОМ-компонентов и приложений разработано на сегодняшний день. В этом разделе будет показано, как использовать существующие СОМ-компоненты с приложениями .NET и наоборот - как состыковывать компоненты .NET с приложениями СОМ.
Часть VIII. Базовые службы Windows
В этой части, завершающей основной материал книги, рассматривается доступ к файлам и реестру, доступ в Internet из ваших приложений и работа со службами Windows.
Часть IX. Приложения (на компакт-диске)
В состав этой части входит несколько приложений, детализирующих принципы объектно-ориентированного программирования, а также информация, специфичная для языка С#. Приложения доступны в формате PDF на компакт-диске, прилагаемом к книге.
Работая с примерами этой книги, вы можете либо вводить весь их код вручную, либо использовать файлы исходного кода, находящиеся на прилагаемом к книге компакт-диске.
Для дискуссий с автором и другими читателями вы можете присоединиться к форуму p2p.wrox.com. Форум представляет собой основанную на Web систему, в которой вы можете посылать сообщения, касающиеся книг издательства Wrox, и посвященные технологиям и взаимодействию с другими читателями и пользователями технологий. Форумы предоставляют средства подписки на сообщения по электронной почте на интересующие вас темы, которые присылают другие участники форума. На этих форумах можно найти авторов, редакторов Wrox, прочих специалистов и ваших коллег-читателей.
По адресу http://p2p.wrox.com вы найдете множество разных форумов, которые помогут вам не только при чтении этой книги, но также и в разработке ваших собственных приложений. Чтобы присоединиться к форуму, выполните следующие шаги:
Вы получите сообщение электронной почты с информацией, описывающей, как верифицировать вашу учетную запись и завершить процесс присоединения к форуму.
Вы можете читать сообщения на форуме и без присоединения к Р2Р, но чтобы отправлять свои собственные сообщения, придется зарегистрироваться.
Подробнее о том, как использовать Wrox P2P, вы можете прочитать в ответах на часто задаваемые вопросы Р2Р FAQ. В них описано, как работает программное обеспечение форума, а также содержатся ответы на многие вопросы по Р2Р и книгам издательства Wrox. Чтобы прочитать FAQ, щелкните на ссылке FAQ на любой странице Р2Р.
Вы, читатель этой книги, и есть главный ее критик и комментатор. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересно услышать и любые другие замечания, которые вам хотелось бы высказать в наш адрес.
Мы ждем ваших комментариев и надеемся на них. Вы можете прислать нам бумажное или электронное письмо, либо просто посетить наш Web-сервер и оставить свои замечания там. Одним словом, любым удобным для вас способом дайте нам знать, нравится или нет вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более интересными для вас.
Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, а также ваш обратный адрес. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг. Наши координаты:
E-mail: info@dialektika.com
WWW: http://www.dialektika.com
Информация для писем из: России: 115419, Москва, а/я 783 Украины: 03150, Киев, а/я 152