Сообщений 12    Оценка 20        Оценить  
Система Orphus

Язык программирования C# 2005 (Си Шарп) и платформа .NET 2.0

Автор: Эндрю Троелсен
Издательство: Вильямс, 2006
1168 страниц

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

Аннотация

Содержание
Введение
Вы и я - одна команда
Обзор содержимого книги
Часть I. Общие сведения о языке C# и платформе .NET
Часть II. Язык программирования C#
Часть III. Программирование компоновочных блоков .NET
Часть IV. Программирование с помощью библиотек .NET
Часть V. Web-приложения и Web-сервисы XML
Исходный код примеров книги
Связь с автором

Аннотация

В этой книге содержится описание базовых принципов функционирования платформы .NET 2.0, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений для .NET. Представлены базовые возможности языка программирования C# 2005 (Си Шарп), включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET, файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.

Содержание

Об авторе
Благодарности
Введение
Вы и я - одна команда
Обзор содержимого книги
Часть I. Общие сведения о языке C# и платформе .NET
Часть II. Язык программирования C#
Часть III. Программирование компоновочных блоков .NET
Часть IV. Программирование с помощью библиотек .NET
Часть V. Web-приложения и Web-сервисы XML
Исходный код примеров книги
От издательства

Часть 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
Утилита обзора решений
Утилита обзора классов
Окно определений программного кода
Утилита обзора объектов
Интегрированная поддержка факторизации программного кода
Фрагменты программного кода и окружения
Средства визуального проектирования классов
Стенд тестирования объектов (OTB-тестер)
Интегрированная справочная система
Дополнительные средства разработки .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#
Определение открытого интерфейса класса
Принципы объектно-ориентированного программирования
Инкапсуляция
Наследование
Полиморфизм
Первый принцип: сервис инкапсуляции 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
Создание перечислимых типов (IEnumerable и 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# 370
Доступ к ''внешним'' переменным
Групповое преобразование методов в 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
Получение Type с помощью System.Object.GetType()
Получение Type с помощью System.Type.GetType()
Получение Type с помощью 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
Метод FileInfo.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 и IRemotingFormatting
Выбор формата и точность типов
Сериализация объектов с помощью BinaryFormatter
Реконструкция объектов с помощью BinaryFormatter
Сериализация объектов с помощью SoapFormatter
Сериализация объектов с помощью XmlSerializer
Контроль генерируемых XML-данных
Сохранение коллекций объектов
Настройка процесса сериализации
Более глубокий взгляд на сериализацию объектов
Настройка параметров сериализации с помощью ISerializable
Настройка параметров сериализации с помощью атрибутов
Поддержка версий сериализации объектов
Резюме

Глава 18. Удаленное взаимодействие .NET

Понятие удаленного взаимодействия .NET
Пространства имен удаленного взаимодействия .NET
Каркас удаленного взаимодействия .NET
Агенты и сообщения
Каналы
Снова о роли форматтера .NET
Общая картина
Несколько слов о расширении стандартных возможностей
Термины удаленного взаимодействия .NET
Варианты маршалинга для объектов: MBR и MBV
Варианты активизации для MBR-типа: WKO и CAO
Варианты конфигурации WKO-типа: синглеты и объекты одиночного вызова
Сводная характеристика MBR-объектов
Инсталляция приложения, использующего удаленное взаимодействие
Создание распределенного приложения
Создание общего компоновочного блока
Создание компоновочного блока сервера
Создание компоновочного блока клиента
Тестирование приложения, использующего удаленное взаимодействие
Тип ChannelServices
Тип RemotingConfiguration
Снова о режиме активизации WKO-типов
Установка сервера на удаленной машине
Использование TCP-каналов
Несколько слов о IpcChannel
Файлы конфигурации удаленного взаимодействия
Создание файлов *.config сервера
Создание файлов *.config клиента
Работа с MBV-объектами
Создание общего компоновочного блока
Создание компоновочного блока сервера
Создание компоновочного блока клиента
Объекты, активизируемые клиентом
Схема лизингового управления циклом существования CAO-типов и 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 и GroupBox
Элемент CheckedListBox
Элемент Listbox
Элемент ComboBox
Порядок переходов по нажатию клавиши табуляции
Мастер настройки переходов по табуляции
Установка кнопки, выбираемой по умолчанию
Работа с другими элементами управления
Элемент MonthCalendar
Элемент ToolTip
Элемент TabControl
Элемент TrackBar
Элемент Panel
Элементы UpDown
Элемент ErrorProvider
Элемент TreeView
Элемент WebBrowsers
Создание пользовательских элементов управления 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.x
Главные преимущества 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.UI.WebControls.WebControl
Категории Web-элементов управления ASP.NET
Несколько слов о System.Web.UI.HtmlControls
Создание простого Web-узла ASP.NET 2.0
Работа с шаблоном страниц
Определение страницы Default.aspx
Создание страницы Inventory
Создание страницы BuildCar
Роль элементов управления, связанных с контролем ввода
Элемент RequiredFieldValidator
Элемент RegularExpressionValidator
Элемент 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]
Игнорирование проверки соответствия правилам BP 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
Резюме

Предметный указатель

Введение

Я помню время, много лет тому назад, когда я предложил издательству Apress книгу, посвященную еще не выпущенному на тот момент пакету инструментальных средств разработки под названием Next Generation Windows Services (NGWS - сервисы Windows следующего поколения). Вы, наверное, знаете, что пакет NGWS в конечном счете стал тем, что сегодня называется платформой .NET. Параллельно с моими исследованиями в области разработки языка программирования C# и платформы .NET шло создание начального варианта соответствующей рукописи. Это был фантастический проект, но я должен признаться, что писать о технологии, которая претерпевала весьма значительные изменения в ходе своей разработки, было занятием, очень действующим на нервы. К счастью, после многих бессонных ночей, где-то к началу лета 2001 года, первое издание книги C# and the .NET Platform было опубликовано почти одновременно с выходом .NET 1.0 Beta 2.

С того времени я был чрезвычайно рад и благодарен тому, что эта книга очень благосклонно принимается прессой и, самое главное, читателями. За эти годы книга предлагалась в качестве номинанта на премию Jolt Award (я тогда "пролетел":) и на премию Referenceware Excellence Award 2003 года в категории книг по программированию (и я счастлив, что на этот раз мне повезло).

Второе издание этой книги (C# and the .NET Platform, Second Edition) дало мне возможность включить в нее материал, соответствующий версии 1.1 платформы .NET. Хотя второе издание книги содержало обсуждение множества новых тем, ряд глав и примеров включить в окончательный вариант книги все же не удалось.

Теперь, когда книга представлена в третьем издании, я с удовлетворением могу заявить, что она содержит (почти) все темы и примеры, которые я не смог представить в предыдущих изданиях. Это издание не только учитывает все многочисленные усовершенствования, предлагаемые в .NET 2.0, но включает и ряд глав, которые, будучи давно написанными, оставались до сих пор неопубликованными - это касается, например, описания CIL (Common Intermediate Language - общий промежуточный язык).

Как и в предыдущих изданиях, в этом, третьем издании книги на основе простого и понятного материала представлены язык программирования C# и библиотеки базовых классов .NET. Я никогда не понимал склонность некоторых авторов к созданию технических книг, более похожих на руководство по подготовке к экзамену GRE, чем пригодный для чтения текст. Задачей этого нового издания по-прежнему остается предоставление вам информации, необходимой для построения программных решений сегодня, а не расточительная трата времени на рассмотрение множества деталей, которые оказываются важными для очень узкого круга специалистов.

Вы и я - одна команда

Публикации разработчиков новых технологий предназначены для очень требовательной аудитории (я должен знать это не понаслышке - ведь я один из них). Построение программных решений для любой платформы требует чрезвычайной детализации и учета множества особенностей соответствующей отрасли, компании, клиентской базы, а также учета сути дела. Вы можете работать в электронном издательстве, разрабатывать системы для федерального или местного правительства, работать в NASA или каком-то оборонном ведомстве. Я, например, разрабатывал программное обеспечение для обучения детей, создавал различные N-звенные системы и участвовал в многочисленных проектах для медицинских и финансовых учреждений. С вероятностью почти 100 процентов тот программный код, который вы создаете на своем рабочем месте, не имеет никакой связи с программным кодом, который пишу я (если, конечно, нам случайно не приходилось работать вместе).

Поэтому в этой книге я сознательно избегаю примеров, в которых программный код связан со спецификой определенных отраслей производства или сфер программирования. Я пытаюсь описать возможности C#, объектно-ориентированного подхода, CLR и библиотек базовых классов .NET 2.0 с помощью примеров, не использующих такой специфики. Вместо того чтобы в каждом примере заполнять таблицы реальными данными, рассчитывать платежки или выполнять какие-то другие специальные вычисления, я буду рассматривать объекты, с которыми могут иметь дело все, - например, автомобили (с их геометрическими формами и служащими соответствующего предприятия, добавленными для полноты картины). И тут на сцену должны выйти вы.

Моей целью является как можно более понятное объяснение возможностей языка программирования C# и описание различных аспектов его применения в рамках платформы .NET. Я сделаю все, что будет в моих силах, чтобы вы, используя знания и навыки, полученные в процессе работы над этой книгой, могли продолжить дальнейшее освоение соответствующих технологий.

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

Обзор содержимого книги

Книга Язык C# 2005 и платформа .NET 2.0, 3-е издание делится на пять логически обособленных разделов, каждый из которых состоит из глав, тем или иным образом связанных между собой. Если вы имели возможность ознакомиться с одним из предыдущих изданий этой книги, вы сможете заметить некоторое сходство в названиях ряда глав, но знайте, что здесь почти на каждую страницу был добавлен новый материал и дополнительные примеры. Вы можете также заметить, что некоторые темы, также освещенные в первом и втором изданиях (например, сериализация объектов и сборщик мусора .NET), здесь представлены в виде отдельных глав.

Кроме того, и вы вправе это ожидать, третье издание книги содержит несколько глав с совершенно новым материалом (в частности главу, посвященную синтаксису и семантике CIL) и подробное описание специфических возможностей .NET 2.0. Теперь, после всех сделанных оговорок, мы перейдем к краткой характеристике содержимого книги по частям и главам.

Часть I. Общие сведения о языке C# и платформе .NET

Целью этой части книги является описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET (многие из таких инструментальных средств являются программными продуктами с открытым исходным кодом). Здесь же представлены базовые возможности языка программирования C#.

Глава 1. Философия .NET

Материал этой главы является фундаментом для понимания всего остального материала книги. Глава начинается с обсуждения традиционных возможностей разработки программ в среде Windows и указывает на недостатки этого, использовавшегося ранее подхода. Но главной целью данной главы является знакомство с набором "строительных блоков" .NET, таких как CLR (Common Language Runtime - общеязыковая среда выполнения), CTS (Common Type System - общая система типов), CLS (Common Language Specification - общеязыковые спецификации) и библиотеки базовых классов. Здесь же предлагается вводная информация о языке программирования C# и формате компоновочных блоков .NET, рассматриваются межплатформенная независимость, вытекающая из самой природы платформы .NET, и роль CLI (Common Language Infrastructure - общеязыковая инфраструктура).

Глава 2. Технология создания приложений на языке C#

В этой главе предлагается краткое описание процесса компиляции и отладки файлов исходного кода для программ, написанных на языке C#, а также обсуждаются соответствующие инструменты и технологии. Сначала вы узнаете, как использовать компилятор командной строки (csc.exe) и файлы ответных сообщений C#. После этого будут рассмотрены некоторые из множества пакетов, предлагающих интегрированную среду разработки, - это, в частности, TextPad, SharpDevelop, Visual C# 2005 Express и (конечно же) Visual Studio 2005. Тут же будет представлен ряд аналогичных пакетов с открытым исходным кодом (Vil, NAnt, NDoc и т.д.), которые на всякий случай должен иметь любой разработчик .NET.

Часть II. Язык программирования C#

В этой части исследуются основные возможности языка программирования C#, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0. Кроме того, часть II познакомит вас с элементами CTS (классы, интерфейсы, структуры, перечни и делегаты) и конструкциями общих типов.

Глава 3. Основы языка C#

В этой главе рассматриваются базовые конструкции языка программирования C#. Вы освоите технику построения классов, выясните разницу между типами, характеризуемыми значениями, и ссылочными типами, приведением к объектному типу и восстановлением из "объектного образа", а также роль любимого всеми базового класса System.Object. В этой же главе показано, как платформа .NET заставляет работать самые простые программные конструкции, такие как перечни, массивы и обработчики строк. Наконец, в этой главе рассматривается ряд специфических для версии 2.0 вопросов, включая типы данных, для которых имеется разрешение принимать значение null.

Глава 4. Язык C# 2.0 и объектно-ориентированный подход

Целью главы 4 является выяснение того, как язык C# сочетается с базовыми принципами ООП - инкапсуляцией, наследованием и полиморфизмом. После рассмотрения ключевых слов и синтаксиса, используемых при построении иерархии классов, будет выяснена роль XML-комментариев в программном коде.

Глава 5. Цикл существования объектов

В этой главе выясняется, как в рамках CLR с помощью сборщика мусора .NET организовано управление памятью. В этой связи вы узнаете о роли корней приложения, генераций объектов и типа System.GC. После изучения базовых вопросов в оставшейся части главы будут рассмотрены тема объектов, предусматривающих освобождение ресурсов (через интерфейс IDisposable), и процесс финализации (реализуемый с помощью метода System.Object.Finalize()).

Глава 6. Структурированная обработка исключений

В этой главе обсуждается структурированный подход к обработке исключений (т.е. исключительных ситуаций), которые могут возникать в среде выполнения. Вы узнаете о ключевых словах языка C# (try, catch, throw и finally), которые позволяют решать соответствующие проблемы, а также выясните разницу между исключениями системного уровня и уровня приложения. Дополнительно в главе обсуждаются специальные средства Visual Studio 2005, призванные упростить задачу выявления и обработки исключений, ускользнувших от вашего внимания.

Глава 7. Интерфейсы и коллекции

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

Глава 8. Интерфейсы обратного вызова, делегаты и события

Цель главы 8 заключается в разъяснении типа делегата. Упрощенно говоря, делегат .NET - это шаблон, "указывающий" на методы в приложении. С помощью такого шаблона вы получаете возможность строить системы, в которых множество объектов могут быть связаны двусторонним обменом. После выяснения возможностей использования делегатов .NET (включая множество возможностей, появившихся с версией 2.0, - например, анонимные методы) в главе рассматривается ключевое слово C# event, которое используется для того, чтобы упростить процесс программирования с помощью делегатов.

Глава 9. Специальные приемы построения типов

Эта глава позволит вам глубже понять возможности языка программирования C# путем изучения более совершенных методов программирования. Вы узнаете, как использовать перегрузку операций и создавать пользовательские программы преобразования (явного или неявного), как строить индексаторы типов и работать с указателями C-типа в файле *.cs.

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

В связи с разработкой .NET 2.0 язык программирования C# был расширен с целью поддержки новой возможности CTS, связанной с так называемыми обобщениями (generics). Вы увидите, что программирование с помощью обобщений ускоряет процесс создания приложений и обеспечивает типовую безопасность. Здесь рассмотрены различные обобщенные типы из пространства имен System.Collections.Generic, а также показано, как строить свои собственные обобщенные методы и типы (как с ограничениями, так и без таковых).

Часть III. Программирование компоновочных блоков .NET

В этой части рассматривается формат компоновочных блоков .NET. Вы узнаете, как развернуть и сконфигурировать библиотеки программного кода .NET, и выясните внутреннюю структуру бинарного образа .NET. В этой же части объясняется роль атрибутов .NET и конструкция многопоточных приложений. В последних главах этой части рассматриваются низкоуровневые вопросы (такие как, например, объектный контекст), а также синтаксис и семантика CIL.

Глава 11. Компоновочные блоки .NET

С точки зрения высокоуровневого подхода, компоновочные блоки - это файлы *.dll или *.exe. Но такая интерпретация компоновочных блоков .NET очень далека от "исчерпывающей". Вы узнаете, чем отличаются одномодульные и многомодульные компоновочные блоки и как строятся и инсталлируются такие объекты. Вы научитесь конфигурировать приватные и общедоступные компоновочные блоки, используя для этого XML-файлы *.config и компоновочные блоки политики поставщика. По ходу дела будут выяснены внутренняя структура GAC (Global Assembly Cache - глобальный кеш компоновочных блоков) и роль утилиты конфигурации .NET Framework 2.0.

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

В главе 12 изучение компоновочных блоков .NET продолжается - здесь рассматривается процесс обнаружения типов в среде выполнения с помощью пространства имен System.Reflection. С помощью этих типов можно строить приложения, способные читать метаданные компоновочных блоков "на лету". Вы узнаете, как динамически активизировать и обрабатывать типы во время выполнения программы, используя динамическое связывание. Здесь же исследуется роль атрибутов .NET (как стандартных, так и создаваемых программистом). Чтобы иллюстрировать возможности применения обсуждавшихся подходов, в конце главы рассматривается конструкция расширяемого приложения Windows Forms.

Глава 13. Процессы, домены приложений, контексты и хосты CLR

Здесь выполняется более глубокий анализ структуры загруженного выполняемого файла .NET. Главная цель - иллюстрация взаимосвязи между процессами, доменами приложений и границами контекстов. Определив эти объекты, вы сможете понять, как обслуживается CLR в рамках операционной системы Windows, и расширить свои знания о mscoree.dll. Представленная здесь информация может оказаться очень полезной при освоении материала главы 14.

Глава 14. Создание многопоточных приложений

В этой главе объясняется, как строить многопоточные приложения, и иллюстрируется ряд приемов, которые вы можете использовать для создания программного кода, безопасного с точки зрения многопоточных приложений. В начале главы снова обсуждается тип делегата .NET, и это делается с целью выяснения внутренних механизмов делегата, используемых для поддержки асинхронного вызова методов. Затем исследуются типы пространства имен System.Threading. Здесь обсуждается множество типов (Thread, ThreadStart, и т.п.), позволяющих очень просто создавать дополнительные потоки.

Глава 15. Понимание CIL и роль динамических компоновочных блоков

В этой главе ставится две цели. В первой половине главы рассматриваются синтаксис и семантика CIL, намного более подробно, чем в предыдущих главах. Остаток главы посвящен выяснению роли пространства имен System.Reflection.Emit. С помощью соответствующих типов можно строить программное обеспечение, позволяющее генерировать компоновочные блоки .NET в памяти во время выполнения программы. Компоновочные блоки, определенные и выполняемые в памяти, формально называют динамическими компоновочными блоками.

Часть IV. Программирование с помощью библиотек .NET

К этому моменту вы уже имеете достаточно информации о языке C# и формате компоновочных блоков .NET. Часть IV предлагает расширить ваши новые знания и исследовать целый ряд пространств имен в рамках библиотек базовых классов, в частности файловый ввод-вывод, слой удаленного доступа .NET, конструкцию Windows Forms и доступ к базам данных с помощью ADO.NET.

Глава 16. Пространство имен System.IO

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

Глава 17. Сериализация объектов

В этой главе рассматриваются сервисы сериализации объектов для платформы .NET. Упрощенно говоря, сериализация позволяет "консервировать" состояние объекта (или множества связанных объектов) в потоке для использования в будущем. Десериализация (как вы можете догадаться сами) является процессом извлечения объекта из потока для восстановления в памяти с целью использования этого объекта в приложении. Поняв базовые принципы этих процессов, вы сможете управлять процессами сериализации с помощью интерфейса ISerializable и множества новых атрибутов, предлагаемых .NET 2.0.

Глава 18. Удаленное взаимодействие .NET

Вопреки распространенному убеждению, Web-сервисы XML не являются единственным средством построения распределенных приложений для платформы .NET. Из этой главы вы узнаете о слое удаленного доступа .NET. Вы увидите, что CLR поддерживает простые возможности обмена объектами между приложениями из разных доменов и на разных машинах, используя семантику MBV (marshal-by-value - маршалинг по значению) и MBR (marshal-by-reference - маршалинг по ссылке). По ходу дела вы узнаете, как в декларативной форме во время выполнения можно изменить поведение распределенного .NET-приложения, используя XML-файлы конфигурации.

Глава 19. Создание окон с помощью System.Windows.Forms

В этой главе начинается ваше знакомство с пространством имен System.Windows.Forms. Подробно обсуждается вопрос построения традиционных приложений с графическим интерфейсом, поддерживающим системы меню, панели инструментов и строки состояния. Как и следует ожидать, здесь рассматриваются различные аспекты проектирования форм в Visual Studio 2005, а для .NET 2.0 - целый ряд типов Windows Forms (MenuStrip, ToolStrip и т.п.).

Глава 20. Визуализация графических данных средствами GDI+

В этой главе говорится о том, как реализовать динамическую визуализацию графических данных в приложении Windows Forms. Кроме обсуждения вопросов обработки шрифтов, цветовых данных, геометрических образов и файлов изображений, в этой главе рассматриваются вопросы проверки попадания в заданную область и техника перетаскивания объектов в рамках графического интерфейса. Вы узнаете о новом формате ресурсов .NET, который, как вы уже можете догадываться к этому моменту, основан на XML-представлении данных.

Глава 21. Использование элементов управления Windows Forms

Эта глава является последней из глав книги, связанных с обсуждением приложений для Windows, и здесь будет рассмотрено множество элементов графического интерфейса, предлагаемых в .NET Framework 2.0. Вы научитесь использовать различные элементы управления Windows Forms, узнаете о приемах разработки диалоговых окон и наследовании форм. В этой же главе рассматривается возможность построения пользовательских элементов управления Windows Forms, которые можно интегрировать в IDE (Integrated Development Environment - интегрированная среда разработки).

Глава 22. Доступ к базам данных с помощью ADO.NET

ADO.NET - это API (Application Programming Interface - интерфейс программирования приложений) доступа к данным для платформы .NET. Вы увидите, что с типами ADO.NET можно взаимодействовать как на связном уровне ADO.NET, так и несвязном. В этой главе будут рассмотрены оба эти режима ADO.NET, а также некоторые новые возможности, связанные с .NET 2.0, включая модель источника данных, построители строк соединений и асинхронный доступ к базам данных.

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

Эта часть книги посвящена созданию Web-приложений ASP.NET и Web-сервисов XML. Из материала первых двух глав этой части вы узнаете, что ASP.NET 2.0 является значительным шагом вперед по сравнению с ASP.NET 1.x и предлагает множество новых возможностей.

Глава 23. Web-страницы и Web-элементы управления ASP.NET 2.0

В этой главе начинается изучение Web-технологий, поддерживаемых в рамках платформы .NET с помощью ASP.NET. Вы увидите, что программный код сценариев серверной стороны теперь заменяется "реальными" объектно-ориентированными языками (такими как C#, VB .NET и им подобными). Здесь будут рассмотрены ключевые для ASP.NET вопросы, такие как работа с файлами, содержащими внешний программный код поддержки, роль Web-элементов управления ASP.NET, использование элементов управления, связанных с контролем ввода, и взаимодействие с новой моделью "шаблона страницы", предлагаемой ASP.NET 2.0.

Глава 24. Web-приложения ASP.NET 2.0

Эта глава расширяет ваши знания о возможностях ASP.NET с помощью рассмотрения различных способов управления состоянием объектов в рамках .NET. Подобно классической модели ASP, приложение ASP.NET позволяет создавать файлы cookie, а также переменные уровня приложения или сеанса. Однако ASP.NET предлагает и новую технологию управления состояниями - это кеш приложения. Рассмотрев многочисленные способы обработки состояний в ASP.NET, вы сможете выяснить роль базового класса System.HttpApplication (скрытого в файле Global.asax) и научиться динамически менять поведение Web-приложения в среде выполнения, используя файл Web.config.

Глава 25. Web-сервисы XML

В этой последней главе книги выясняется роль Web-сервисов XML и рассматриваются возможности их создания в рамках .NET. Грубо говоря, Web-сервис - это компоновочный блок, активизируемый с помощью стандартных HTTP-запросов. Преимущество этого подхода заключается в том, что HTTP является сетевым протоколом, применяемым почти повсеместно, поэтому он прекрасно подходит для использования в распределенных системах, нейтральных в отношении различных платформ и языков. Здесь же вы узнаете о множестве сопутствующих технологий (WSDL, SOAP и UDDI), которые обеспечивают гармонию взаимодействия Web-сервиса и внешнего клиента.

Исходный код примеров книги

Программный код всех примеров из этой книги (с точностью до встречающихся кое-где небольших фрагментов) доступен для загрузки из раздела исходного кода Web-узла издательства. Выполнив поиск по названию книги, перейдите на ее "домашнюю" страницу, откуда вы сможете загрузить файл *.zip с исходным кодом примеров. После распаковки содержимого этого файла вы обнаружите соответствующий программный код, разделенный по главам.

Обратите внимание на то, что в книге в разделах с названием Исходный код указано, где содержится программный код обсуждаемого примера. Этот программный код можно загрузить в Visual Studio 2005 для проверки и модификации.

Для загрузки примера откройте файл *.sln в указанном подкаталоге.

Связь с автором

Если у вас возникнут вопросы в связи с исходным кодом примеров, потребность в дополнительных разъяснениях или просто желание поделиться своими идеями в отношении платформы .NET, без всякого стеснения пишите мне на мой адрес электронной почты atroelsen@IntertechTraining.com (чтобы гарантировать, что ваше сообщение не окажется в корзине моей почтовой системы, укажите "C# TE" в строке темы).

Я постараюсь сделать все возможное, чтобы ответить в приемлемые сроки, но прошу учесть то, что я, как и вы, время от времени бываю очень занят. Если я не отвечаю в течение недели или двух, то знайте, что это не из вредности и не потому, что я не хочу общаться с вами. Я просто занят (или, если выпало счастье, нахожусь где-то на отдыхе).

Так что, вперед! Спасибо за то, что вы купили эту книгу (или, как минимум, заглянули в нее в книжном магазине, обдумывая возможность ее покупки). Я надеюсь, что вам будет приятно читать ее, и вы сможете применить полученные знания в благородных целях.

Берегите себя,

Эндрю Троэльсен

    Сообщений 12    Оценка 20        Оценить