"ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание" - читать интересную книгу автора (Троелсен Эндрю)
Эндрю Троелсен ЯЗЫК ПРОГРАММИРОВАНИЯ C# 2005 И ПЛАТФОРМА .NET 2.0 3-е издание Введение Вы и я – одна команда Обзор содержимого книги Исходный код примеров книги Связь с автором От издательства ЧАСТЬ I. Общие сведения о языке C# и платформе .NET ГЛАВА 1. Философия .NET Предыдущее состояние дел Подход C/Win32 API Подход C++/MFC Подход Visual Basic 6.0 Подход Java/J2EE Подход COM Подход Windows DNA Решение .NET Главные компоненты платформы .NET (CLR, CTS и CLS) Роль библиотек базовых классов Роль языка C# Другие языки программирования с поддержкой .NET Жизнь в многоязычном окружении Компоновочные блоки .NET Одномодульные и многомодульные компоновочные блоки Роль CIL Преимущества CIL Преобразование CIL-кода в набор инструкций, соответствующих платформе Роль метаданных типов .NET Роль манифеста компоновочного блока Общая система типов Тип класса Тип структуры Тип интерфейса Тип перечня Тип делегата Члены типов Встроенные типы данных CTS Общеязыковые спецификации Гарантия CLS-совместимости Общеязыковая среда выполнения Различия между компоновочными блоками, пространствами имен и типами Программный доступ к пространствам имен Ссылки на внешние компоновочные блоки Использование ildasm.exe Просмотр CIL-кода Просмотр метаданных типов Просмотр метаданных компоновочных блоков Инсталляция среды выполнения .NET Платформенная независимость .NET Резюме ГЛАВА 2. Технология создания приложений на языке C# Установка .NET Framework 2.0 SDK Компилятор командной строки для C# (csc.exe) Настройка компилятора командной строки для C# Дополнительные средства командной строки .NET Компоновка C#-приложений с помощью csc.exe Ссылки на внешний компоновочный блок Компиляция множества файлов Ссылки на множество внешних компоновочных блоков Работа с ответными файлами csc.exe Ответный файл, используемый по умолчанию (csc.rsp) Отладчик командной строки (cordbg.exe) Отладка с командной строки Компоновка .NET-приложений с помощью TextPad Активизация цветовой схемы C# Настройка фильтра файлов *.cs Подключение csc.exe Ассоциация команд с пунктами меню Использование фрагментов программного кода C# Компоновка .NET-приложений с помощью SharpDevelop Возможности SharpDevelop Окна проектов и классов Обзор компоновочных блоков Инструменты проектирования Windows Forms Компоновка .NET-приложений с помощью Visual C# 2005 Express Компоновка .NET-приложений с помощью Visual Studio 2005 Возможности Visual Studio 2005 Утилита обзора решений Утилита обзора классов Окно определений программного кода Утилита обзора объектов Интегрированная поддержка факторизации программного кода Фрагменты программного кода и окружения Средства визуального проектирования классов Стенд тестирования объектов (ОТВ-тестер) Интегрированная справочная система Дополнительные средства разработки .NET-приложений Резюме ЧАСТЬ II. Язык программирования C# ГЛАВА 3. Основы языка C# Структура простой программы на C# Вариации метода Main() Обработка аргументов командной строки Использование аргументов командной строки в Visual Studio 2005 Несколько слов о классе System.Environment Определение классов и создание объектов Роль конструкторов Утечка памяти Определение "объекта приложения" Класс System.Console Ввод и вывод в классе Console Форматирование консольного вывода Флаги форматирования строк .NET Доступность членов Доступность типов Значения, назначаемые переменным по умолчанию Значения, назначаемые по умолчанию, и локальные переменные Синтаксис инициализации членов-переменных Определение констант Ссылки на константы Определение полей только для чтения Статические поля только для чтения Ключевое слово static Статические методы Статические данные Статические конструкторы Статические классы Модификаторы параметров методов Способ передачи параметров, используемый по умолчанию Модификатор out Модификатор ref Модификатор params Итерационные конструкции Цикл for Цикл foreach Конструкции while и do/while Конструкции выбора решений и операции сравнения Оператор if/else Оператор switch Типы, характеризуемые значениями, и ссылочные типы Типы, характеризуемые значениями, ссылочные типы и оператор присваивания Типы, характеризуемые значениями и содержащие ссылочные типы Передача ссылочных типов по значению Передача ссылочных типов по ссылке Типы, характеризуемые значениями, и ссылочные типы: заключительные замечания Операции создания объектного образа и восстановления из объектного образа Примеры создания объектных образов и восстановления значений Восстановление из объектного образа для пользовательских типов Работа с перечнями .NET Базовый класс System.Enum Мастер-класс: System.Object Поведение System.Object, заданное по умолчанию Переопределение элементов System.Object, заданных по умолчанию Переопределение System.Object.ToString() Переопределение System.Object. Equals() Переопределение System.Object.GetHashCode() Тестирование переопределенных членов Статические члены System.Object Типы данных System (и их обозначения в C#) Эксперименты с числовыми типами данных Члены System.Boolean Члены System.Char Анализ значений строковых данных System.DateTime и System.TimeSpan Тип данных System.String Базовые операции со строками Управляющие последовательности Буквальное воспроизведение строк в C# Роль System.Text.StringBuilder Типы массивов .NET Массивы в качестве параметров (и возвращаемых значений) Работа с многомерными массивами Базовый класс System.Array Типы с разрешением принимать значение null Работа с типами, для которых допустимы значения null Операция ?? Пользовательские пространства имен Абсолютные имена типов Использование псевдонимов Вложенные пространства имен Пространство имен по умолчанию в Visual Studio 2005 Резюме ГЛАВА 4. Язык C# 2.0 и объектно-ориентированный подход Тип класса в C# Перегрузка методов Использование this для возвратных ссылок в C# Передача вызовов конструктора с помощью this Определение открытого интерфейса класса Принципы объектно-ориентированного программирования Инкапсуляция Наследование Полиморфизм Первый принцип: сервис инкапсуляции C# Инкапсуляция на основе методов чтения и модификации Инкапсуляция на основе свойств класса Внутреннее представление свойств в C# Контекст операторов get и set для свойств Свойства, доступные только для чтения, и свойства, доступные только для записи Статические свойства Второй принцип: поддержка наследования в C# Управление созданием базовых классов с помощью base Множественные базовые классы Хранение семейных тайн: ключевое слово protected Запрет наследования: изолированные классы Модель локализации/делегирования Вложенные определения типов Третий принцип: поддержка полиморфизма в C# Ключевые слова virtual и override Снова о ключевом слове sealed Абстрактные классы Принудительный полиморфизм: абстрактные методы Возможность скрывать члены Правила приведения типов в C# Распознавание типов Приведение числовых типов Парциальные типы C# Документирование исходного кода в C# с помощью XML Символы форматирования в XML-коде комментариев Трансформация XML-кода комментариев Резюме ГЛАВА 5. Цикл существования объектов Классы, объекты и ссылки Основные сведения о существовании объектов CIL-код для new Роль корней приложения Генерации объектов Тип System.GC Активизация сборки мусора Создание объектов, предусматривающих финализацию Переопределение System.Object.Finalize() Детали процесса финализации Создание объектов, предусматривающих освобождение ресурсов Снова о ключевом слове using в C# Создание типов, предусматривающих освобождение ресурсов и финализацию Формализованный шаблон освобождения ресурсов Резюме ГЛАВА 6. Структурированная обработка исключений Ода ошибкам и исключениям Роль обработки исключений в .NET Атомы обработки исключений в .NET Базовый класс System.Exception Простейший пример Генерирование исключений Обработка исключений Конфигурация состояния исключений Свойство TargetSite Свойство StackTrace Свойство HelpLink Свойство Data Исключения системного уровня (System.SystemException) Исключения уровня приложения (System.ApplicationException) Создание пользовательских исключений, раз… Создание пользовательских исключений, два… Создание пользовательских исключений, три! Обработка множеств исключений Общие операторы catch Генерирование вторичных исключений Внутренние исключения Блок finally Что и чем генерируется Исключения, оставшиеся без обработки Отладка необработанных исключений в Visual Studio 2005 Резюме ГЛАВА 7. Интерфейсы и коллекции Определение интерфейсов в C# Реализация интерфейсов в C# Интерфейсы в сравнении с абстрактными базовыми классами Вызов членов интерфейса на уровне объекта Получение интерфейсных ссылок: ключевое слово as Получение интерфейсных ссылок: ключевое слово is Интерфейсы в качестве параметров Интерфейсы в качестве возвращаемых значений Массивы интерфейсных типов Явная реализация интерфейса Разрешение конфликтов имен Построение иерархии интерфейсов Интерфейсы с множеством базовых интерфейсов Реализация интерфейсов в Visual Studio 2005 Создание перечислимых типов (Enumerable и IEnumerator) Методы итератора в C# Создание клонируемых объектов (ICloneable) Пример клонирования Создание сравнимых объектов (IComparable) Сортировка по набору критериев (IComparer) Типы, определяющие сортировку, и пользовательские свойства Интерфейсы из пространства имен System.Collections Интерфейс ICollection Интерфейс IDictionary Интерфейс IDictionaryEnumerator Интерфейс IList Классы из пространства имен System.Collections Работа с типом ArrayList Работа с типом Queue Работа с типом Stack Пространство имен System.Collections.Specialized Резюме ГЛАВА 8. Интерфейсы обратного вызова, делегаты и события Интерфейсы обратного вызова Тип делегата .NET Определение делегата в C# Базовые классы System.MulticastDelegate и System.Delegate Простейший пример делегата Исследование объекта делегата Модификация типа Car с учетом делегатов Реализация групповых вызовов Более совершенный пример делегата Делегаты в качестве параметров Анализ программного кода делегирования Ковариантность делегатов События в C# Глубинный механизм событий Прием поступающих событий Упрощенная регистрация событий в Visual Studio 2005 "Разборчивые" события Анонимные методы в C# Доступ к "внешним" переменным Групповое преобразование методов в C# Резюме ГЛАВА 9. Специальные приемы построения типов Создание пользовательских индексаторов Вариации индексатора для типа Garage Внутреннее представление индексаторов типов Заключительные замечания об индексаторах Перегрузка операций Перегрузка бинарных операций Операции += и -= Перегрузка унарных операций Перегрузка операций проверки на тождественность Перегрузка операций сравнения Внутреннее представление перегруженных операций Использование перегруженных операций в языках, не поддерживающих перегрузку операций Заключительные замечания о перегрузке операций Пользовательские преобразования типов Преобразования чисел Преобразования типов класса Создание пользовательских подпрограмм преобразования Варианты явного преобразования для типа Square Определение подпрограмм неявного преобразования Внутреннее представление пользовательских подпрограмм преобразования Ключевые слова C#, предназначенные для более сложных конструкций Ключевое слово checked Ключевое слово unchecked Работа с типами указателя Ключевое слово sizeof Директивы препроцессора C# Разделы программного кода Условная компиляция Резюме ГЛАВА 10. Обобщения Снова о создании объектных образов, восстановлении значений и System.Object Проблемы создания объектных образов и восстановления значений Типовая безопасность и строго типизованные коллекции Проблемы создания объектных образов и строго типизованные коллекции Пространство имен System.Collections.Generic Тип List‹T› Создание обобщенных методов Пропуск параметров типа Создание обобщенных структур (и классов) Ключевое слово default в обобщенном программном коде Создание пользовательских обобщенных коллекций Установка ограничений для параметров типа с помощью where Отсутствие поддержки ограничений при использовании операций Создание обобщенных базовых классов Создание обобщенных интерфейсов Создание обобщенных делегатов Имитация обобщенных делегатов в .NET 1.1 Несколько слов о вложенных делегатах Резюме ЧАСТЬ III. Программирование компоновочных блоков .NET ГЛАВА 11. Компоновочные блоки .NET Роль компоновочных блоков .NET Расширенные возможности многократного использования программного кода Установка четких границ типов Управление версиями Самоописание Средства конфигурации Формат компоновочного блока .NET Заголовок Win32 Заголовок CLR Программный код CIL, метаданные типа и манифест компоновочного блока Необязательные ресурсы компоновочного блока Одномодульные и многомодульные компоновочные блоки Создание и использование одномодульных компоновочных блоков Анализ манифеста Анализ CIL-кода Анализ метаданных типов Создание приложения-клиента в C# Создание приложения-клиента в Visual Basic .NET Межъязыковое перекрестное наследование Создание и использование многомодульных компоновочных блоков Анализ файла ufo.netmodule Анализ файла airvehicles.dll Использование многомодульного компоновочного блока Приватные компоновочные блоки Идентификация приватных компоновочных блоков Процесс зондирования Конфигурация приватных компоновочных блоков Файлы конфигурации и Visual Studio 2005 Утилита конфигурации NET Framework 2.0 Общедоступные компоновочные блоки Строгая форма имени Создание строгого имени для CarLibrary.dll Назначение строгого имени в Visual Studio 2005 Установка и удаление общедоступных компоновочных блоков Отложенная подпись Использование общедоступных компоновочных блоков Анализ манифеста SharedCarLibClient Конфигурация общедоступных компоновочных блоков Фиксация версии общедоступного компоновочного блока Создание общедоступного компоновочного блока версии 2.0.0.0 Динамическая привязка к конкретной версии компоновочного блока Снова об утилите конфигурации .NET Framework 2.0 Анализ внутренней структуры GAC Файлы политики публикации компоновочных блоков Игнорирование файла политики публикации Элемент ‹codeBase› Пространство имен System.Configuration Файл конфигурации машины Общая схема связей компоновочных блоков Резюме ГЛАВА 12. Отображение типов, динамическое связывание и программирование с помощью атрибутов Метаданные типов Анализ метаданных перечня EngineState Анализ метаданных типа Car Анализ TypeRef Представление метаданных компоновочного блока Представление ссылок на другие компоновочные блоки Представление строковых литералов Отображение типов в .NET Класс System.Type Получение Туре с помощью System.Object.GetType() Получение Туре с помощью System.Type.GetType() Получение Туре с помощью typeof() Создание пользовательского приложения для просмотра метаданных Отображение методов Отображение полей и свойств Отображение реализованных интерфейсов Отображение вспомогательной информации Реализация Main() Отображение параметров и возвращаемых значений методов Динамически загружаемые компоновочные блоки Отображение общедоступных компоновочных блоков Динамическое связывание Класс System.Activator Вызов методов без параметров Вызов методов с параметрами Программирование с помощью атрибутов Потребители атрибутов Применение встроенных атрибутов C# Параметры конструктора для атрибутов Атрибут Obsolete в действии Сокращенное представление атрибутов в C# Создание пользовательских атрибутов Применение пользовательских атрибутов Ограничение использования атрибута Атрибуты уровня компоновочного блока (и уровня модуля) Файл AssemblyInfo.cs в Visual Studio 2005 Отображение атрибутов при статическом связывании Отображение атрибутов при динамическом связывании Перспективы отображения, статического и динамического связывания и пользовательских атрибутов Создание расширяемого приложения Создание CommonSnappableTypes.dll Создание подключаемого компонента в C# Создание подключаемого компонента в Visual Basic .NET Создание расширяемого приложения Windows Forms Резюме ГЛАВА 13. Процессы, домены приложений, контексты и хосты CLR Выполнение традиционных процессов Win32 Обзор потоков Взаимодействие с процессами в рамках платформы .NET Список выполняемых процессов Чтение данных конкретного процесса Список множества потоков процесса Информация о наборе модулей процесса Начало и остановка процессов с помощью программных средств Домены приложений .NET Список доменов приложения процесса Программное создание новых доменов приложения Программная выгрузка доменов приложения Границы контекста объекта Контекстно-независимые и контекстно-связанные типы Определение контекстно-связанных объектов Проверка контекста объекта Еще несколько слов о процессах, доменах приложения и контекстах Хостинг общеязыковой среды выполнения Параллельное выполнение CLR Загрузка конкретной версии CLR Дополнительные хосты CLR Резюме ГЛАВА 14. Создание многопоточных приложений Взаимосвязь процессов, доменов приложений, контекстов и потоков Проблема конкуренции и роль синхронизации потоков Краткий обзор делегатов .NET Асинхронная природа делегатов Методы BeginInvoke() и EndInvoke() Интерфейс System.IAsyncResult Асинхронный вызов методов Синхронизация вызывающего потока Роль делегата AsyncCallback Роль класса AsyncResult Передача и получение пользовательских данных состояния Пространство имен System.Threading Класс System.Threading.Thread Получение информации об отдельном потоке Свойство Name Свойство Priority Программное создание вторичных потоков Работа с делегатом ThreadStart Работа с делегатом ParameterizedThreadStart Приоритетные и фоновые потоки Проблема конкурентного доступа Синхронизация с помощью ключевого слова lock в C# Синхронизация с помощью типа System.Threading.Monitor Синхронизация с помощью типа System.Threading.Interlocked Синхронизация с помощью атрибута [Synchronization] Программирование с помощью таймеров обратного вызова Пул потоков CLR Резюме ГЛАВА 15. CIL и роль динамических компоновочных блоков Природа программирования в терминах CIL Директивы, атрибуты и коды операций CIL Роль директив CIL Роль атрибутов CIL Роль кодов операций CIL Различия между мнемоникой и кодом операции CIL Добавление и извлечение данных: стековая природа CIL Челночная технология разработки Роль меток в программном коде CIL Взаимодействие с CIL: модификация файла *.il Компиляция CIL-кода с помощью ilasm.exe Компиляция CIL-кода с помощью SharpDevelop Компиляция CIL-кода с помощью ILIDE# Роль peverify.exe Директивы и атрибуты CIL Ссылки на внешние компоновочные блоки Определение текущего компоновочного блока Определение пространств имен Определение типов класса Определение и реализация интерфейсов Определение перечней Компиляция файла CILTypes.il Соответствие между типами библиотеки базовых классов .NET, C# и CIL Определение членов типов в CIL Определение полей данных Определение конструкторов типов Определение свойств Определение параметров членов Анализ кодов операций CIL Директива .maxstack Объявление локальных переменных Связывание параметров с локальными переменными Скрытая ссылка this Представление итерационных конструкций Создание компоновочного блока .NET в CIL Создание CILCars.dll Создание CILCarClient.exe Динамические компоновочные блоки Исследование пространства имен System.Reflection.Emit Роль System.Reflection.Emit.ILGenerator Генерирование динамического компоновочного блока Генерирование компоновочного блока и набора модулей Роль типа ModuleBuilder Генерирование типа HelloClass и принадлежащей ему строковой переменной Генерирование конструкторов Генерирование метода HelloWorld() Использование динамически сгенерированного компоновочного блока Несколько слов о System.CodeDOM Резюме ЧАСТЬ IV. Программирование с помощью библиотек .NET ГЛАВА 16. Пространство имен System.IO Анализ пространства имен System.IO Типы Directory(Info) и File(Info) Абстрактный базовый класс FileSystemInfo Работа с типом DirectoryInfo Перечень FileAttributes Перечисление файлов с помощью DirectoryInfo Создание подкаталогов с помощью DirectoryInfo Работа с типом Directory Работа с типом класса DriveInfo Работа с классом FileInfo Метод FileInfо.Create() Метод FileInfo.Open() Методы FileInfo.OpenRead() и FileInfo.OpenWrite() Метод FileInfo.OpenText() Методы FileInfo.CreateText() и FileInfo.AppendText() Работа с типом File Новые члены File в .NET 2.0 Абстрактный класс Stream Работа с FileStream Работа с StreamWriter и StreamReader Запись в текстовый файл Чтение из текстового файла Непосредственное создание типов StreamWriter/StreamReader Работа с типами StringWriter и StringReader Работа с BinaryWriter и BinaryReader Программный мониторинг файлов Асинхронный файловый ввод-вывод Резюме ГЛАВА 17. Сериализация объектов Основы сериализации объектов Роль объектных графов Конфигурирование объектов для сериализации Открытые поля, приватные поля и открытые свойства Выбор формата сериализации Интерфейсы IFormatter и IRemotingFormatter Выбор формата и точность типов Сериализация объектов с помощью BinaryFormatter Реконструкция объектов с помощью BinaryFormatter Сериализация объектов с помощью SoapFormatter Сериализация объектов с помощью XmlSerializer Контроль генерируемых XML-данных Сохранение коллекций объектов Настройка процесса сериализации Более глубокий взгляд на сериализацию объектов Настройка параметров сериализации с помощью ISerializable Настройка параметров сериализации с помощью атрибутов Поддержка версий сериализации объектов Резюме ГЛАВА 18. Удаленное взаимодействие .NET Понятие удаленного взаимодействия .NET Пространства имен удаленного взаимодействия .NET Каркас удаленного взаимодействия .NET Агенты и сообщения Каналы Снова о роли форматтера .NET Общая картина Несколько слов о расширении стандартных возможностей Термины удаленного взаимодействия .NET Варианты маршалинга для объектов: MBR и MBV Варианты активизации для MBR-типа: WKO и CAO Варианты конфигурации WKO-типа: синглеты и объекты одиночного вызова Сводная характеристика MBR-объектов Инсталляция приложения, использующего удаленное взаимодействие Создание распределенного приложения Создание общего компоновочного блока Создание компоновочного блока сервера Создание компоновочного блока клиента Тестирование приложения, использующего удаленное взаимодействие Тип ChannelServices Тип RemotingConfiguration Снова о режиме активизации WKO-типов Установка сервера на удаленной машине Использование ТСР-каналов Несколько слов о IpcChannel Файлы конфигурации удаленного взаимодействия Создание файлов *.config сервера Создание файлов *.config клиента Работа с MBV-объектами Создание общего компоновочного блока Создание компоновочного блока сервера Создание компоновочного блока клиента Объекты, активизируемые клиентом Схема лизингового управления циклом существования САО-типов и WKO-синглетов Схема лизингового управления, используемая по умолчанию Изменение параметров схемы лизингового управления Настройка параметров лизинга на стороне сервера Настройка параметров лизинга на стороне клиента Спонсоры лизинга сервера (и клиента) Альтернативные хосты для удаленных объектов Хостинг удаленных объектов с помощью сервиса Windows Хостинг удаленных объектов с помощью IIS Асинхронное удаленное взаимодействие Роль атрибута [OneWay] Резюме ГЛАВА 19. Создание окон с помощью System.Windows.Forms Обзор пространства имен System.Windows.Forms Работа с типами Windows Forms Создание главного окна вручную Принцип разграничения обязанностей Роль класса Application Возможности класса Application Делегат System.EventHandler "Анатомия" формы Функциональные возможности класса Control Использование возможностей класса Control Ответ на события MouseMove Регистрация щелчков кнопок мыши Ответ на события клавиатуры Функциональные возможности класса Form Цикл существования типа Form Создание Windows-приложений в Visual Studio 2005 Получение доступа к устаревшим элементам управления Анализ проекта Windows Forms в Visual Studio 2005 Обработка событий в режиме проектирования Класс Program Необходимые компоновочные блоки Работа с MenuStrip и ContextMenuStrip Добавление элемента Textbox в MenuStrip Создание контекстных меню Проверка состояния элементов меню Работа с StatusStrip Создание системы меню Настройка StatusStrip Работа с типом Timer Включение отображения Вывод подсказок для выбранных элементов меню Состояние готовности Работа с ToolStrip Работа с ToolStripContainer Создание MDI-приложения Создание родительской формы Создание дочерней формы Создание дочерних окон Резюме ГЛАВА 20. Визуализация графических данных средствами GDI+ Обзор пространств имен GDI+ Обзор пространства имен System.Drawing Утилитарные типы System.Drawing Тип Point(F) Тип Rectangle(F) Класс Region Класс Graphics Сеансы Paint Обновление области клиента формы Доступ к объекту Graphics вне обработчика Paint Освобождение объекта Graphics Системы координат GDI+ Единица измерения, предлагаемая по умолчанию Выбор альтернативной единицы измерения Изменение начала координат Определение цветовых значений Класс ColorDialog Манипулирование шрифтами Работа с семействами шрифтов Работа с гарнитурами и размерами шрифтов Список установленных шрифтов Класс FontDialog Обзор пространства имен System.Drawing.Drawing2D Работа с типами Pen Концы линий Работа с типами Brush Работа с HatchBrush Работа с TextureBrush Работа с LinearGradientBrush Визуализация изображений Попадание в заданную область и операции перетаскивания для PictureBox Проверка попадания в область изображения Проверка попадания в область, отличную от прямоугольной Формат ресурсов .NET Пространство имен System.Resources Создание файла *.resx программными средствами Создание файла *.resources Добавление файла *.resources в компоновочный блок .NET Работа с ResourceWriter Генерирование ресурсов в Visual Studio 2005 Чтение ресурсов программными средствами Резюме ГЛАВА 21. Использование элементов управления Windows Forms Элементы управления Windows Forms Добавление элементов управления в форму вручную Тип Control.ControlCollection Добавление элементов управления в форму в Visual Studio 2005 Работа с базовыми элементами управления Элемент Label Элемент TextBox Элемент MaskedTextBox Элемент Button Элементы CheckBox, RadioButton и Group Box Элемент CheckedListBox Элемент Listbox Элемент ComboBox Порядок переходов по нажатию клавиши табуляции Мастер настройки переходов по табуляции Работа с другими элементами управления Элемент MonthCalendar Элемент ToolTip Элемент TabControl Элемент TrackBar Элемент Panel Элементы UpDown Элемент ErrorProvider Элемент TreeView Элемент WebBrowser Создание пользовательских элементов управления Windows Forms Создание изображений Создание пользовательского интерфейса режима проектирования Реализация CarControl Определение пользовательских событий Определение пользовательских свойств Контроль анимации Отображение названия Тестирование типа CarControl Создание пользовательской формы для CarControl Пространство имен System.ComponentModel Совершенствование режима проектирования CarControl Определение выбираемых по умолчанию свойств и событий Выбор изображений для панели инструментов Создание пользовательских диалоговых окон Свойство DialogResult Наследование форм Динамическое позиционирование элементов управления Windows Forms Свойство Anchor Свойство Dock Табличное и потоковое размещение элементов Резюме ГЛАВА 22. Доступ к базам данных с помощью ADO.NET Высокоуровневое определение ADO.NET Две грани ADO.NET Поставщики данных ADO.NET Поставщики данных Microsoft Поставщики данных других производителей Дополнительные пространства имен ADO.NET Типы System.Data Интерфейс IDbConnection Интерфейс IDbTransaction Интерфейс IDbCommand Интерфейсы IDbDataParameter и IDataParameter Интерфейсы IDbDataAdapter и IDataAdapter Интерфейсы IDataReader и IDataRecord Интерфейсы и абстрактные поставщики данных Файлы конфигурации и гибкость приложений Модель источника поставщика данных .NET 2.0 Зарегистрированные источники поставщиков данных Рабочий пример источника поставщика данных Элемент ‹connectionStrings› Установка базы данных Cars Соединение с базой данных в Visual Studio 2005 Связный уровень ADO.NET Работа с объектами соединения Работа с ConnectionStringBuilder в .NET 2.0 Работа с объектами команд Работа с объектами чтения данных Получение множества наборов результатов с помощью объектов чтения данных Изменение содержимого таблиц с помощью объектов команд Вставка новых записей Удаление записей Обновление записей Работа с объектами параметризованных команд Указание параметров с помощью типа DbParameter Выполнение хранимых процедур с помощью DbCommand Асинхронный доступ к данным в .NET 2.0 Несвязный уровень ADO.NET Роль DataSet Члены DataSet Работа с DataColumn Создание DataColumn Разрешение автоприращения для полей Добавление DataColumn в DataTable Работа с DataRow Свойство DataRow.RowState Работа с DataTable Работа с DataTableReader в .NET 2.0 Сохранение DataSet (и DataTable) в формате XML Привязка DataTable к интерфейсу пользователя Программное удаление строк Применение фильтров и сортировки Обновление строк Работа с типом DataView Работа с адаптерами данных Заполнение DataSet с помощью адаптера данных Отображение имен базы данных в понятные имена Обновление базы данных с помощью объекта адаптера данных Установка свойства InsertCommand Установка свойства UpdateCommand Установка свойства DeleteCommand Генерирование SQL-команд с помощью типов построителя команд Объекты DataSet с множеством таблиц и объекты DataRelation Навигационные возможности для связанных таблиц Возможности мастеров данных Строго типизованные объекты DataSet Автоматически генерируемый компонент данных Резюме ЧАСТЬ V. Web-приложения и Web-сервисы XML ГЛАВА 23. Web-страницы и Web-элементы управления ASP.NET 2.0 Роль HTTP Web-приложения и Web-серверы Работа с виртуальными каталогами IIS Сервер разработки ASP.NET 2.0 Роль HTML Структура HTML-документа Разработка HTML-формы Создание пользовательского интерфейса на базе HTML Роль сценариев клиента Пример сценария клиента Контроль допустимости вводимых данных Подача запроса формы (GET и POST) Создание "классической" ASP-страницы Ответ на отправку POST Проблемы классической технологии ASP Главные преимущества ASP.NET 1.х Главные преимущества ASP.NET 2.0 Пространства имен ASP.NET 2.0 Модель программного кода Web-страницы ASP.NET Модель одномодульной страницы Модель страницы с внешним кодом поддержки Структура каталогов Web-узла ASP.NET Роль папки Bin Роль папки App_Code Цикл компиляции страницы ASP.NET 2.0 Цикл компиляции одномодульных страниц Цикл компиляции многомодульных страниц Цепочка наследования типа Page Тип System.Web.UI.Page Взаимодействие с поступающим HTTP-запросом Получение статистики браузера Доступ к поступающим данным формы Свойство IsPostBack Взаимодействие с исходящим HTTP-ответом Генерирование HTML-содержимого Перенаправление пользователей Цикл существования Web-страницы ASP.NET Роль атрибута AutoEventWireUp Событие Error Природа Web-элементов управления Обработка серверных событий Свойство AutoPostBack Тип System.Web.UI.Control Список вложенных элементов управления Динамическое добавление (и удаление) элементов управления Основные члены типа System.Web.Ul.WebControls.WebControl Категории Web-элементов управления ASP.NET Несколько слов о System.Web.UI.HtmlControls Создание простого Web-узла ASP.NET 2.0 Работа с шаблоном страниц Определение страницы Default.aspx Создание страницы Inventory Создание страницы BuildCar Роль элементов управления, связанных с контролем ввода Элемент RequiredFieldValidator Элемент RangeValidator Элемент CompareValidator Создание отчетов по проверкам Резюме ГЛАВА 24. Web-приложения ASP.NET 2.0 Проблема состояния Технологии управления состоянием ASP.NET Роль состояния представлений ASP.NET Демонстрация использования состояния представлений Добавление пользовательских данных состояния представлений Несколько слов о данных состояния элементов Роль файла Global.asax Последний глобальный шанс для обработки исключений Базовый класс HttpApplication Различия между приложением и сеансом Поддержка данных состояния приложения Изменение данных состояния приложения Обработка завершения работы Web-приложения Кэш приложения Кэширование данных Изменение файла *.aspx Обработка сеансовых данных Дополнительные члены HttpSessionState Данные cookie Создание данных cookie Чтение поступающих данных cookie Настройка Web-приложения ASP.NET с помощью Web.config Разрешение трассировки с помощью ‹trace› Настройка вывода сообщений об ошибках с помощью ‹customErrors› Сохранение данных состояния с помощью ‹sessionState› Утилита администрирования узла ASP.NET 2.0 Наследование конфигурации Резюме ГЛАВА 25. Web-сервисы XML Роль Web-сервисов XML Преимущества Web-сервисов XML Определение клиента Web-сервиса XML Компоненты Web-сервиса XML Служба поиска Web-сервиса XML Служба описания Web-сервиса XML Транспортный протокол Пространства имен .NET для Web-сервисов XML Пространство имен System.Web.Services Создание Web-сервиса XML вручную Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe Тестирование Web-сервиса XML с помощью IIS Просмотр WSDL-документа Автоматически генерируемая страница тестирования Создание пользовательской страницы тестирования Создание Web-сервиса XML в Visual Studio 2005 Реализация Web-метода TellFortune() Роль базового класса WebService Атрибут [WebService] Свойства Namespace и Description Свойство Name Атрибут [WebServiceBinding] Игнорирование проверки соответствия правилам ВР 1.1 Отмена проверки соответствия правилам BP 1.1 Атрибут [WebMethod] Описание Web-метода с помощью свойства Description Устранение конфликтов имен WSDL с помощью свойства MessageName Поддержка данных состояния Web-сервисов с помощью свойства EnableSession Язык описания Web-сервисов (WSDL) Определение WSDL-документа Элемент ‹types› Элемент ‹message› Элемент ‹portType› Элемент ‹binding› Элемент ‹service› Снова о протоколах связи Web-сервисов XML Связь HTTP GET и HTTP POST Связь SOAP Утилита командной строки wsdl.exe Преобразование WSDL-кода в серверный программный код Web-сервиса Преобразование WSDL-кода в программный код агента для клиента Программный код агента Конструктор, заданный по умолчанию Поддержка синхронного вызова Поддержка асинхронного вызова Создание приложения клиента Генерирование программного кода агента в Visual Studio 2005 Доступ к пользовательским типам Web-методов Доступ к массивам Доступ к структурам Доступ к типам DataSet ADO.NET Клиент Windows Forms Представление типов на стороне клиента Стандарт поиска и взаимодействия (протокол UDDI) Взаимодействие с UDDI в Visual Studio 2005 Резюме
Эндрю Троелсен ЯЗЫК ПРОГРАММИРОВАНИЯ C# 2005 И ПЛАТФОРМА .NET 2.0 3-е издание Посвящаю эту книгу моей матери, Мэри Троелсен. Мама! Благодарю тебя за поддержку в прошлом, настоящем и будущем. Ах, да! И спасибо за то, что ты не стала наказывать меня, когда я пришел домой с "ирокезом". Люблю тебя. Пух.
Об авторе Эндрю Троелсен (Andrew Troelsen) носит титул MVP (Most Valuable Professional – "самый ценный специалист") по Visual C# в Microsoft, а также является партнером, преподавателем и консультантом Intertech Training (http://www.IntertechTraining.com ), центра обучения разработчиков .NET и J2EE. Он является автором множества книг, среди которых Developer's Workshop to COM and ATL 3.0 (Wordware Publishing, 2000), COM and .NET Interoperability (Apress, 2002), Visual Basic .NET and the .NET Platform: An Advanced Guide (Apress, 2001), а также книга C# and the .NET Platform (Apress, 2003), которая была удостоена ряда специальных наград. Кроме того, он является автором множества статей по вопросам .NET для MSDN online и MacTech (в этих статьях рассматриваются различные аспекты межплатформенной независимости .NET) и часто выступает с докладами, посвященными .NET, в конференциях и группах пользователей.
В настоящее время Эндрю Троелсен проживает в Миннеаполисе, шт. Миннесота, со своей женой Амандой. В свободное время он мечтает о том, что Wild выиграют Кубок Стэнли, Vikings выиграют Суперкубок (он бы хотел, чтобы это произошло до его пенсии), a Timberwolves станут многократными чемпионами NBA.
О научном редакторе Гэвин Смит (Gavin Smyth) является профессионалом в области программного обеспечения с многолетним (и, как он считает, слишком большим) опытом разработки программ – от драйверов различных устройств до приложений, предназначенных для многоузловых серверов на таких разных платформах, как "несгибаемые" операционные системы реального времени Unix и Windows, и таких языках программирования, как ассемблер, C++, Ada и C# (не считая множества других, не менее достойных языков). Он выполнял заказы для таких компаний, как ВТ и Nortel, а в настоящее время работает для Microsoft. Гэвин Смит имеет ряд собственных печатных работ, вышедших в научных издательствах (EXE и Wrox – где они сейчас?), но в какой-то момент он пришел к заключению, что критика чужих публикаций оказывается куда более плодотворной. Помимо этого, когда он не борется в своем саду с сорняками и насекомыми, он пытается заставить роботов LEGO делать то, что они, по его мнению, должны делать (это все исключительно ради детей – честно!).
Благодарности Выпуск третьего издания этой книги был бы просто невозможен без поддержки и помощи многих окружающих меня людей, Во-первых, следует выразить благодарность всей команде издательства Apress. Каждый из ее членов приложил немало усилий, чтобы превратить мою "сырую" рукопись в безупречный продукт. Далее, я должен выразить признательность моему научному редактору, Гэвину Смиту (известному также под псевдонимом Eagle Eye – Орлиный Глаз), который выполнил огромную работу, чтобы уберечь меня от множества ошибок. Все оставшиеся ошибки (опечатки, неточности в программном коде и т.д.), которые смогли "пробраться" в эту книгу, конечно же, лежат на моей совести.
Спасибо моим друзьям и членам моей семьи, которые (в очередной раз) терпели мои цейтноты, а иногда и связанную с этим несдержанность в поведении. Такой же благодарности заслуживают мои друзья и сотрудники из Intertech Training. Я очень ценю оказанную вами поддержку (как прямую, так и косвенную). Наконец, отдельное спасибо и "все фантики" моей жене Мэнди за ее любовь и содействие.