Система Orphus

C# 2005 для профессионалов

Авторы: Кристиан Нейгел
Билл Ивьен
Джей Глинн
Карли Уотсон
Морган Скиннер
Аллен Джонс
Издательство: Вильямс, 2006
1376 страниц

Материал предоставил: Издательство ''Вильямс''
Найти в магазинах
Купить в Озоне (806 руб.)
Купить в Болеро (650 руб.)
Купить в OZ.by (Беларусь)
Купить в My-Shop.ru (717 руб.)

Аннотация

Содержание
Об авторах
Введение
Значение .NET и C#
Преимущества .NET
Что нового в .NET Framework 2.0
Для чего подходит С#
Что вам нужно, чтобы писать и выполнять код С#
Что рассматривается в этой книге
Исходный код
От издательства

Аннотация

Книга известных специалистов в области разработки приложений с использованием .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.

Содержание

Об авторах
Благодарности
Введение
Значение .NET и С#
Преимущества .NET
Что нового в ..NET Framework 2.0
Интеграция с SQL Server
Поддержка 64-разрядных вычислений
Обобщения
Анонимные методы
Типы, допускающие null
Итераторы
Частичные классы
Для чего подходит С#
Что вам нужно, чтобы писать и выполнять код С#
Что рассматривается в этой книге
Часть I. Язык С#
Часть П. Среда .NЕТ
Часть III. Данные
Часть IV. Windows-приложения
Часть V. Web-приложения
Часть VI. Коммуникации
Часть VII. Способность к взаимодействию
Часть VIII. Базовые службы Windows
Часть IX. Приложения (на компакт-диске)
Принятые соглашения
Исходный код
р2рwrox.com
От издательства

Часть I. Язык C#

Глава 1. Архитектура .NET

Отношение между С# и .NET
Общеязыковая исполняющая среда
Преимущества управляемого кода
Более внимательный взгляд на промежуточный язык (Ш.)
Поддержка объектной ориентации и интерфейсов
Различие типов значений и типов ссылок
Строгая типизация данных
Обработка ошибок с помощью исключений
Применение атрибутов
Сборки
Приватные сборки
Разделяемые сборки
Рефлексия
Классы .NET Framework
Пространства имен
Создание приложений .NET с использованием С#
Создание приложений ASP.NЕТ
Создание форм Windows Form
Элементы управления Wnidows
Службы Windows
Роль языка С# в архитектуре .NET Enterprise
Резюме

Глава 2. Основы С#

Прежде чем начать
Ваша первая программа на С#
Код
Компиляция и запуск программы
Более пристальный взгляд
Переменные
Инициализация переменных
Область видимости переменных
Константы
Предопределенные типы данных
Типы значений и ссылочные типы
Типы CTS
Предопределенные типы значений
Предопределенные ссылочные типы
Поток управления
Условные операторы
Циклы
Операторы перехода
Перечисления
Массивы
Пространства имен
Оператор using
Псевдонимы пространств имен
Метод Main()
Множественные методы Main()
Передача аргументов в Main()
Дополнительные сведения о компиляции файлов С#
Консольный ввод-вывод
Применение комментариев
Внутренние комментарии в исходных файлах
Документация ХМ
Директивы препроцессора С#
#define и #undef
#if, #elif, #else и #endif
#warning и #еrrоr
#region и #endregion
#line
#pragma
Рекомендации по программированию на С#
Правила для идентификаторов
Соглашения по использованию
Резюме

Глава 3. Объекты и типы

Классы и структуры
Члены класса
Данные-члены
Функции-члены
Свойства, доступные только для чтения и только для записи
Поля readonly
Структуры
Структуры - это типы значений
Структуры и наследование
Конструкторы структур
Частичные классы
Статические классы
Класс Object
Методы System.Object
Метод ToString()
Резюме

Глава 4. Наследование

Типы наследования
Сравнение наследования реализации и наследования интерфейса
Множественное наследование
Структуры и классы
Наследование интерфейса
Виртуальные методы
Сокрытие методов
Вызов базовых версий функций
Абстрактные классы и функции
Закрытые классы и методы
Конструкторы производных классов
Добавление в иерархию конструктора без параметров
Добавление в иерархию конструкторов с параметрами
Модификаторы
Модификаторы видимости
Другие модификаторы
Интерфейсы
Определение и реализация интерфейсов
Производные интерфейсы
Резюме

Глава 5. Операции и приведения

Операции
Сокращенные операции
Тернарная операция
Операции checked и unchecked
Операция is
Операция as
Операция sizeof
Операция typeof
Типы и операции, принимающие значение null
Операция поглощения null
Приоритеты операций
Безопасность типов
Преобразования типов
Неявные преобразования
Явные преобразования
Упаковка и распаковка
Проверка равенства объектов
Сравнение ссылочных типов на эквивалентность
Проверка типов значений на равенство
Перегрузка операций
Как работают операции
Пример перегрузки операции: структура Vесtоr
Какие операции можно перегружать?
Пользовательские приведения
Реализация пользовательских приведений
Множественное приведение
Резюме

Глава 6. Делегаты и события

Делегаты
Объявление делегатов в С#
Использование делегатов в С#
Анонимные методы
Пример SimpleDelegate
Пример BubbleSorter
Групповые делегаты
События
Представление события с точки зрения получателя
Генерация событий
Резюме

Глава 7. Управление памятью и указатели

За кулисами управления памятью
Типы значений
Ссылочные типы
Сборка мусора
Освобождение неуправляемых ресурсов
Деструкторы
Интерфейс IDisposable
Реализация интерфейса IDisposable и деструктора
Небезопасный код
Указатели
Пример использования указателей: PointerPlayaround
Применение указателей для оптимизации производительности
Резюме

Глава 8. Строки и регулярные выражения

System.String
Построение строк
Члены класса StringBuilder
Форматирование строк
Регулярные выражения
Введение в регулярные выражения
Пример RegularExpressionsPlayaround
Отображение результатов
Соответствия, группы и захваты
Резюме

Глава 9. Коллекции

Группы объектов
Коллекции
Массивы-списки
Класс Stack
Класс Queue
Класс SortedList
Словари и хеш-таблицы
Обобщения
Резюме

Глава 10. Обобщения

Обзор
Производительность
Безопасность типов
Повторное использование двоичного кода
Увеличение кода в объеме
Рекомендации по именованию
Обобщенные классы коллекций
Обзор обобщенных коллекций
Использование класса List<T>
Использование класса Queue<T>
Использование LinkedList<T>
Создание пользовательских обобщенных классов
Значения по умолчанию
Ограничения
Обобщенные методы
Обобщенные делегаты
Другие обобщенные каркасные типы
Nullable<T>
EventHandler<TEventArgs>
ArraySegment<T>
Резюме

Глава 11. Рефлексия

Пользовательские атрибуты
Написание пользовательских атрибутов
Пример пользовательского атрибута: WhatsNewAttributes
Рефлексия
Класс System.Type
Пример TypeView
Класс Assembly
Завершение примера WhatsNewAttributes
Резюме

Глава 12. Ошибки и исключения

Обзор ошибок и обработки исключений
Классы исключений
Перехват исключений
Определяемые пользователем классы исключений
Резюме

Глава 13. Многопоточность

Многопоточность
Приложения с множеством потоков
Управление потоками
Пример ThreadPlayaround
Приоритеты потоков
Синхронизация
Создание потоков с помощью ThreadPool
Резюме

Часть II. Среда NET

Глава 14. Visual Studio 2005

Работа с Visual Studio 2005
Создание проекта
Решения и проекты
Программный код приложений Windows
Считывание проектов Visual Studio 6
Исследование проекта и заполнение его кодом
Компоновка проекта
Отладка
Рефакторизация
Резюме

Глава 15. Сборки

Что такое сборка?
Ответ на 'кошмар DLL'
Свойства сборок
Домены приложений и сборки
Структура сборки
Манифест сборки
Пространства имен, сборки и компоненты
Приватные и разделяемые сборки
Просмотр содержимого сборки
Создание сборок
Поддержка межъязыкового взаимодействия
CTS и CLS
Языковая независимость в действии
Требования CLS
Глобальный кэш сборок
Средство просмотра глобального кэша сборок
Создание разделяемых сборок
Конфигурация
Категории конфигурационных параметров
Контроль версий
Конфигурирование каталогов
Резюме

Глава 16. Безопасность в .NET

Безопасность доступа кода
Группы кода
Полномочия доступа кода и наборы полномочий
Уровни политики безопасности: компьютер, пользователь, предприятие
Поддержка безопасности в .NET Framework
Требование полномочий
Запрос полномочий
Неявные полномочия
Отрицание полномочий
Добавление полномочий
Создание полномочий доступа кода
Декларативная безопасность
Управление политиками безопасности
Конфигурационные файлы
Управление группами кода и полномочиями
Включение и отключение средств безопасности
Восстановление политики безопасности
Создание группы кода
Удаление группы кода
Изменение полномочий группы кода
Создание и применение наборов полномочий
Распространение кода с использованием строгих имен
Распространение кода с использованием сертификатов
Управление зонами
Средства безопасности, основанные на ролях
Принципал
Принципал Windows
Роли
Декларативные средства безопасности на основе ролей
Резюме

Глава 17. Локализация

Пространство имен System.Globalization
Использование Unicode
Культуры и регионы
Культуры в действии
Сортировка
Ресурсы
Создание ресурсных файлов
Генератор ресурсных файлов
ResourceWriter
Использование ресурсных файлов
Пространство имен System.Resources
Пример локализации с применением Visual Studio
Программное переключение культуры
Использование настраиваемых ресурсов сообщений
Автоматическое восстановление ресурсов
Удаленные переводы
Локализация в ASP.NET
Средства чтения пользовательских ресурсов
Создание DatabaseResourceReader
Создание DatabaseResourceSet
Создание DatabaseResourceManager
Клиентское приложение для DatabaseResourceReader
Создание пользовательской культуры
Резюме

Глава 18. Развертывание

Проектирование развертывания
Опции развертывания
хсору
Инструмент Copy Web
Публикация Web-сайтов
Проекты развертывания
ClickOnce
Требования развертывания
Простое развертывание
хсору
хсору и Web-приложения
Инструмент Copy Web
Публикация Web-сайтов
Проекты инсталляторов
Что такое Windows Installer?
Создание инсталляторов
ClickOnce
Операция ClickOnce
Публикация приложений
Настройки ClickOnce
Кэш приложений
Безопасность
Расширенные опции
Резюме

Часть III. Данные

Глава 19. Доступ к данным в .NET

Обзор технологии ADO.NET
Пространства имен
Совместно используемые классы
Классы, специфические для базы данными
Использование соединений с базами данных
Манипулирование строками соединений
Эффективное использование соединений
Вариант два: использование оператора блока
Транзакции
Команды
Выполнение команд
Вызов хранимых процедур
Быстрый доступ к данным: объект считывания данных
Управление данными и отношениями: класс DataSet
Таблицы данных
Столбцы данных
Строки данных
Отношения между данными
Ограничения, накладываемые на данные
Схемы XML
Генерация программного кода с помощью XSD.EXE
Заполнение данными объекта DataSet
Заполнение данными класса DataSet с помощью адаптера данных
Заполнение данными DataSet из XML
Фиксация изменений в DataSet
Обновление с помощью адаптеров данных
Запись выхода XML
Pa6oTacADO.NET
Многозвенные разработки
Генерация ключей в SQL Server
Соглашения по именованию
Резюме

Глава 20. Программирование в .NET с использованием SQL Server 2005

Хост для исполняющей среды .NET
Пространство имен Microsoft.SqlServer.Server
Типы, определяемые пользователем
Создание типов UDT
Использование типов UDT
Использование типов UDT в коде клиентской стороны
Агрегаты, определенные пользователями
Создание агрегатов, определяемых пользователем
Использование агрегатов, определяемых пользователем
Хранимые процедуры
Создание хранимых процедур
Использование хранимых процедур
Функции, определяемые пользователем
Создание функций, определяемых функций
Использование функций, определяемых пользователем
Триггеры
Создание триггеров
Использование триггеров
Тип данных XML
Таблицы с данными XML
Запрос данных
Язык модификации данных XML (XML DML)
Индексы XML
XML со строгим контролем типов
Резюме

Глава 21. Работа с XML

Поддержка стандартов XML в .NET
Введение в пространство имен System.Xml
Использование MSXML в .NET
Использование классов System.Xml
Чтение и запись потоков данных XML
Использование класса XmlReader
Поиск данных для атрибутов
Проверка допустимости с помощью XmlReader
Использование класса XmlWriter
Использование DOM в .NET
Использование класса XmlDocument
Использование навигаторов XPathNavigator
Пространство имен System.Xml.XPath
Пространство имен System.Xml.Xsl
XML и ADO.NET
Преобразование данных ADO.NET в XML
Преобразование данных XML в формат ADO.NET
Чтение и запись документа DiffGram
Сериализация объектов в XML
Сериализация без доступа к исходному коду
Резюме

Глава 22. Работа с Active Directory

Архитектура Active Directory
Возможности
Концепции Active Directory
Характеристика данных службы Active Directory
Схема
Инструменты администрирования Active Directory
Оснастка Active Directory Users and Computers
Редактор ADSI Edit
Программирование для Active Directory
Классы пространства имен System.DirectoryServices
Связывание
Получение записей каталога
Коллекции объектов
Кэш
Создание новых объектов
Обновление записей в каталоге
Доступ к собственным объектам ADSI
Поиск в Active Directory
Поиск пользовательских объектов
Интерфейс пользователя
Получение контекста именования схемы
Извлечение имен свойств пользовательского класса
Поиск пользовательских объектов
Язык DSML
Классы пространства имен System.DirectoryServices.Protocols
Поиск объектов Active Directory с помощью DSML
Резюме

Часть IV. Windows-приложения

Глава 23. Windows Forms

Создание приложения Windows Forms
Иерархия классов
Класс Control
Размер и положение
Внешний вид
Взаимодействие с пользователем
Функциональность Windows
Прочая функциональность
Стандартные элементы управления и компоненты
Button
CheckBox
RadioButton
ComboBox, ListBox и CheckedListBox
DateTimePicker
ErrorProvider
HelpProvider
ImageList
Label
ListView
PictureBox
ProgressBar
TextBox, RichTextBox и MaskedTextBox
Panel
FlowLayoutPanel и TableLayoutPanel
SplitContainer
TabControl и TabPages
ToolStrip
MenuStrip
ContextMenuStrip
ToolStripMenuItem
ToolStripManager
ToolStripContainer
Формы
Класс Form
Многодокументный интерфейс (MDI)
Заказные элементы управления
Резюме

Глава 24. Просмотр данных в .NET

Элемент управления DataGridView
Отображение табличных данных
Источники данных
Иерархия классов DataGridView
Привязка данных
Простая привязка
Объекты, привязывающие данные
BindingContext
Visual Studio .NET и доступ к данным
Создание соединения
Извлечение данных
Обновление источника данных
Построение схемы
Другие общие требования
Резюме

Глава 25. Вывод графики с помощью GDI+

Основные принципы рисования
GDI и GDI+
Рисование контуров
Рисование контуров с использованием OnPaint()
Использование области отсечения
Измерение координат и областей
Point и PointF
Size и SizeF
Rectangle и RectangleF
Region
Замечания по поводу отладки
Рисование прокручиваемых окон
Мировые координаты, страничные координаты и координаты устройства
Цвета
Значения Red-Green-Blue (RGB)
Именованные цвета
Режимы отображения Graphics и безопасная палитра
Безопасная палитра
Перья и кисти
Кисти
Перья
Рисование фигур и линий
Вывод графических изображений
Результаты манипулирования изображениями
Рисование текста
Простой пример отображения текста
Шрифты и их семейства
Пример: перечисление семейств шрифтов
Редактирование текстового документа: пример CapsEditor
Метод Invalidate()
Вычисление размеров элементов и размеров документа
OnPaint()
Преобразования координат
Реакция на пользовательский ввод
Печать
Реализация команд меню Print и Print Preview
Резюме

Часть V. Web-приложения

Глава 26. Страницы ASP.NET

Введение в ASP.NET
Управление состоянием в ASP.NET
ASP.NET Web Forms
Модель кода ASP.NET
Серверные элементы управления ASP.NET
ADO.NET и привязка данных
Усовершенствование приложения заказа мероприятий
Дополнительные сведения о связывании данных
Конфигурация приложения
Резюме

Глава 27. Разработка с использованием ASP.NET

Расширенные элементы управления
Пользовательские элементы управления
Использование элементов управления в PCSDemoSite
Заказные элементы управления
Ведущие страницы
Ведущие страницы в PCSDemoSite
Навигация по сайту
Навигация в PCSDemoSite
Безопасность
Добавление аутентификации с помощью форм с применением мастера Security Wizard
Реализация системы входа
Web-серверные элементы управления для входа на сайт
Защита каталогов
Безопасность в PCSDemoSite
Темы
Применение темы к странице
Определение тем
Темы в PCSDemoSite
Резюме

Часть VI. Коммуникации

Глава 28. Web-службы

SOAP
WSDL
Web-службы
Поставка Web-служб
Использование Web-служб
Расширение примера Event-Booking
Web-служба Event-Booking
Клиент Event-Booking
Передача данных в заголовках SOAP
Резюме

Глава 29. .NET Remoting

Что такое .NET Remoting?
Типы приложений и протоколы
CLR Object Remoting
Обзор .NET Remoting
Контексты
Активизация
Атрибуты и свойства
Коммуникации между контекстами
Удаленные объекты, клиенты и серверы
Удаленные объекты
Простой сервер
Простой клиент
Архитектура .NET Remoting
Каналы
Установка свойств канала
Взаимозаменяемость каналов
Форматировщики
ChannelServices и RemoteConfiguration
Активизация объектов
Приемники сообщений
Передача объектов в методах удаленных объектов
Управление временем жизни
Другие средства .NET Remoting
Конфигурационные файлы
Хостинг серверов в ASP.NET
Классы, интерфейсы и утилита Soapsuds
Асинхронное удаленное взаимодействие
Безопасность .NET Remoting
Удаленное взаимодействие и события
Контексты вызовов
Резюме

Глава 30. Службы уровня предприятия

Обзор
История появления
Где должны применяться службы уровня предприятия
Контексты
Автоматические транзакции
Распределенные транзакции
Пулы объектов
Безопасность на основе ролей
Очередизация компонентов
Слабо связанные события
Службы без компонентов
Создание простого приложения СОМ+
Класс ServicedComponent
Подпись сборки
Атрибуты сборки
Создание компонента
Развертывание
Автоматическое развертывание
Ручное развертывание
Создание инсталляционного пакета
Проводник Enterprise Services
Клиентское приложение
Транзакции
Свойства ACID
Атрибуты транзакций
Результаты транзакций
Пример приложения
Классы сущностей
Компонент OrderControl
Компонент OrderData
Компонент OrderLineData
Клиентское приложение
Службы без компонентов
Резюме

Глава 31. Message Queuing

Обзор
Когда нужно использовать Message Queuing
Средства Message Queuing
Продукты Message Queuing
Архитектура Message Queuing
Сообщения
Очередь сообщений
Административные инструменты Message Queuing
Создание очереди сообщений
Свойства очереди сообщений
Программирование Message Queuing
Создание очереди сообщений
Поиск очереди
Открытие известных очередей
Отправка сообщения
Прием сообщений
Приложения заказа курсов
Библиотека классов для приложения заказа курсов
Отправитель сообщений о заказе курсов
Отправка приоритетов и восстановимых сообщений
Приемник сообщений о заказе курсов
Получение результатов
Подтверждающие очереди
Очереди ответов
Транзакционные очереди
Инсталляция Message Queuing
Резюме

Глава 32. Будущее распределенного программирования

Проблемы сегодняшнего дня
Web-службы
Безопасность
Надежность
Транзакции
Производительность
Обзор WCF
Программирование WCF
Контракты
Реализация службы
Связывание
Хостинг
Клиенты
Подготовка к WCF
.NETRemoting
Web-службы ASP.NET
Службы Enterprise Services
Message Queuing
Резюме

Часть VII. Способность к взаимодействию

Глава 33. Взаимодействие с СОМ

.NET и СОМ
Метаданные
Освобождение памяти
Интерфейсы
Связывание методов
Типы данных
Регистрация
Многопоточность
Обработка ошибок
Обработка событий
Маршализация
Использование СОМ-компонента клиентом .NET
Создание компонента СОМ
Создание вызываемой оболочки времени выполнения
Последствия многопоточности
Добавление точек подключения
Применение элементов управления ActiveX в Windows Forms
Использование СОМ-объектов из ASP.NET
Использование компонента .NET из СОМ-клиента
Вызываемые оболочки СОМ
Создание компонента .NET
Создание библиотеки типов
Атрибуты СОМ с возможностью взаимодействия
Регистрация СОМ
Создание клиента СОМ
Добавление точек подключения
Создание клиента с объектом-приемником
Запуск элементов управления Windows Forms в Internet Explorer
Резюме

Часть VIII. Базовые службы Windows

Глава 34. Манипулирование файлами и реестром

Управление файловой системой
Классы .NET, представляющие файлы и папки
Класс Path
Пример: браузер файлов
Перемещение, копирование и удаление файлов
Пример: FilePropertiesAndMovement
Обзор кода FilePropertiesAndMovement
Чтение и запись файлов
Чтение файла
Запись файлов
Потоки
Буферизованные потоки
Чтение и запись двоичных файлов с применением FileStream
Чтение и запись текстовых файлов
Чтение информации о дисках
Безопасность файлов
Чтение ACL файла
Чтение ACL каталога
Добавление и удаление ACL файла
Чтение и запись в реестр
Реестр
Классы реестра .NET
Пример: SelfPlacingWindow
Резюме

Глава 35. Доступ в Internet

Класс WebClient
Загрузка файлов из Web
Базовый пример Web-клиента
Загрузка файлов в Web
Классы WebRequest и WebResponse
Другие средства WebRequest и WebResponse
Отображение результата в виде HTML-страницы
Обеспечение простого просмотра Web из ваших приложений
Запуск экземпляров Internet Explorer
Доступ к дополнительным возможностям Internet Explorer из приложения
Просмотр документов с применением элемента управления WebBrowser
Печать документов с помощью WebBrowser
Отображение кода загруженной страницы
Иерархия WebRequest и WebResponse
Служебные классы
URI
IP-адреса и имена DNS
Протоколы низкого уровня
Классы наиболее низкого уровня
Резюме

Глава 36. Службы Windows

Что такое служба Windows?
Архитектура служб Windows
Программа службы
Программа управления службой
Программа конфигурирования службы
Пространство имен System.ServiceProcess
Создание службы Windows
Библиотека классов, использующая сокеты
Пример TcpClient
Проект службы Window
Службы и многопоточность
Инсталляция службы
Программа инсталляции
Класс Installer
Классы ServiceProcessInstaller и ServiceInstaller
Класс ServiceInstaller Dialog
Мониторинг и управление службой
Оснастка Computer Management консоли ММС
net.exe
sc.exe
Visual Studio Server Explorer
Класс ServiceController
Мониторинг службы
Поиск и устранение неисправностей
Интерактивные службы
Протоколирование событий
Архитектура протоколирования ошибок
Классы протоколирования событий
Добавление протоколирования событий
Добавление протоколирования событий к другим типам приложений
Добавление протоколирования событий для QuoteServer
Мониторинг производительности
События, связанные с электропитанием
Резюме

Часть IX. Приложения (на компакт-диске)

Приложение А. Принципы объектно-ориентированного программирования
Приложение Б. С# для разработчиков на Visual Basic 6
Приложение В. С# для разработчиков на Java
Приложение Г. С# для разработчиков на C++
Предметный указатель

Об авторах

Кристиан Нагель

Кристиан Нагель - архитектор программного обеспечения и разработчик один из партнеров 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 и C#

Чтобы понять истинное значение .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.

Повышенная безопасность - каждая сборка также может содержать встроенную информацию безопасности, которая в точности описывает, кому и каким категориям пользователей или процессов какие методы каких классов разрешено вызывать. Это обеспечивает очень высокую степень контроля за тем, как могут использоваться сборки, которые вы поставляете.

Более подробно преимущества .NET рассматриваются в главе 1.

Что нового в .NET Framework 2.0

Первая версия .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. Эта версия, 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.

Поддержка 64-разрядных вычислений

Большая часть программирования в наши дни выполняется на 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 = "Вы щелкнули на  кнопке!";
                               };
      }
}

Используя анонимные методы, нет необходимости создавать отдельный метод. Вместо этого необходимый код помещается непосредственно после объявления делегата. Предложения и шаги, которые должны быть выполнены делегатом, помещаются между фигурными скобками и завершаются точкой с запятой.

Типы, допускающие null

Благодаря появлению обобщений в основе .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

Для дискуссий с автором и другими читателями вы можете присоединиться к форуму 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