Предисловие | 13 |
|
Об авторе | 15 |
|
Благодарности | 16 |
|
Введение | 17 |
|
Для кого написана книга | 17 |
Что вам потребуется | 18 |
|
От издательства | 20 |
|
Глава 1 • Знакомство с С# | 21 |
|
Программа HelloWorld на С# (инструментарий SDK) | 21 |
Программа HelloWorld на С# (Visual Studio .NET) | 23 |
Итоги | 27 |
|
Глава 2 • Краткий курс С# | 28 |
|
История Java и С# | 28 |
Простые типы | 29 |
Целочисленные типы | 30 |
Тип decimal | 30 |
Упаковка | 31 |
Переобъявление переменных | 31 |
Массивы | 32 |
Передача массивов в качестве параметров | 32 |
Создание многомерных массивов | 32 |
Команды и выражения | 33 |
Команда switch | 33 |
Команда goto | 34 |
Команда foreach | 35 |
Команда lock | 36 |
Команда using | 36 |
Оператор is | 37 |
Оператор as | 37 |
Команды и операторы checked и unchecked | 37 |
Проверка равенства в С# | 38 |
Функции и методы | 40 |
Передача параметров | 41 |
Модификаторы методов | 42 |
Списки параметров переменной длины | 43 |
Типы и объекты | 43 |
Классы | 44 |
Структуры | 54 |
Интерфейсы | 55 |
Делегаты | 55 |
Перечисления | 60 |
Исключения | 61 |
Пространства имён и директива using | 62 |
Документирующие комментарии | 63 |
Препроцессор | 65 |
Небезопасный код | 67 |
Стандартизация С# | 67 |
Итоги | 67 |
|
Глава 3 • Знакомство с платформой .NET | 68 |
|
Компоненты платформы .NET | 68 |
Библиотеки классов | 69 |
CLR | 70 |
Преимущества .NET | 71 |
Стандартизация | 71 |
Языковая независимость | 72 |
Платформенная независимость | 73 |
Итоги | 74 |
|
Глава 4 • WinForms | 75 |
|
Приложение HelloWorld с использованием WinForms | 75 |
Создание проекта и размещение элементов | 75 |
Как устроено приложение WinForms | 78 |
Элементы WinForms | 79 |
Управление раскладкой | 82 |
Создание меню | 83 |
Создание панелей инструментов | 87 |
Справка | 90 |
Печать | 91 |
Проблемы многопоточности | 93 |
Элемент Notifylcon | 93 |
Включение элементов ActiveX | 95 |
Итоги | 98 |
|
Глава 5 • Построение web-сайтов на базе ASP.NET | 99 |
|
Создание простой страницы WebForms | 99 |
Программа HelloWorld на базе WebForms | 100 |
Анализ программы WebForms HelloWorld | 101 |
Web-элементы | 103 |
Проверка ввода | 104 |
Не используйте элементы там, где можно обойтись HTML | 106 |
Построение нестандартных элементов | 107 |
Создание пользовательских элементов WebForms | 107 |
Создание серверных элементов WebForms | 108 |
Создание приложений ASP.NET | 109 |
Поддержание состояния | 110 |
Состояние страницы | 110 |
Состояние сеанса | 111 |
Состояние приложения | 111 |
Cookie | 112 |
Страницы HttpHandler | 112 |
Сравнение ASP.NET с ASP | 114 |
Итоги | 115 |
|
Глава 6 • ADO.NET | 116 |
|
Поддержка баз данных в Visual Studio .NET | 116 |
Создание баз данных | 117 |
Создание таблиц | 118 |
Сохранённые процедуры | 121 |
Простой запрос в JDBC и ADO.NET | 122 |
Построение запроса в JDBC | 122 |
Построение запроса в ADO.NET | 123 |
Об использовании CommandBehavior.CloseConnection | 126 |
Параметры команд | 127 |
Использование сохранённых процедур | 128 |
Объект DataSet | 130 |
Снова о простом запросе | 130 |
Объект DataSet с несколькими таблицами | 131 |
Модификация базы данных | 137 |
Пулы подключений | 140 |
Реализация элементов, связанных с данными | 140 |
Простое связывание | 140 |
Табличные элементы | 140 |
Сравнение ADO.NET с ADO | 148 |
Итоги | 148 |
|
Глава 7 • Многопоточные приложения | 149 |
|
Запуск потока | 149 |
Управление потоками | 151 |
Метод Join | 151 |
Методы Suspend и Resume | 152 |
Методы Yield и Sleep | 153 |
Активные и фоновые потоки | 153 |
Потоковый пул | 153 |
Атрибут Synchronization.Attribute | 155 |
Мониторы | 155 |
Мютексы | 157 |
Атомарные операции | 158 |
Что такое «подразделение»? | 159 |
Потоки и уборка мусора | 159 |
Итоги | 160 |
|
Глава 8 • Сети | 161 |
|
Сокеты | 161 |
Низкоуровневый интерфейс сокетов | 161 |
Высокоуровневый интерфейс сокетов | 162 |
Подключаемые протоколы | 163 |
Удалённый вызов | 164 |
Общие сведения | 164 |
Программирование клиента удалённого вызова | 165 |
Программирование сервера удалённого вызова | 166 |
Использование IIS для удалённого вызова | 167 |
Режимы активизации удалённых объектов | 168 |
Создание переходных классов утилитой soapsuds | 168 |
Удалённые объекты и уборка мусора | 169 |
Безопасность | 170 |
Web-службы ASP.NET | 170 |
Программирование web-службы | 170 |
Программирование клиента web-службы | 174 |
Исключения в web-службах | 178 |
Сериализация и десериализация параметров | 178 |
Кодирование параметров | 179 |
Заголовки SOAP | 180 |
Расширения SOAP | 182 |
Итоги | 188 |
|
Глава 9 • Работа с XML | 189 |
|
Знакомство с классами System.XML | 189 |
XMLDOM | 190 |
Операции с DOM | 190 |
Операции чтения и записи XML | 192 |
Свойства InnerXml и OuterXml | 192 |
Реализация XmlReader и XmlWriter вместо SAX | 192 |
Проверка по схеме XML | 193 |
Преобразования XSLT | 194 |
Передача параметров при преобразовании | 197 |
Включение расширений в преобразование | 197 |
Выражения XPath | 197 |
Сериализация XML | 199 |
Базовая сериализация | 199 |
Использование атрибутов формирования | 200 |
Утилита xsd | 201 |
Pa6oTacXMLBVisualStudio.NET | 203 |
Итоги | 203 |
|
Глава 10 • Создание компонентов | 204 |
|
Знакомство с компонентами .NET | 204 |
Создание компонента .NET | 205 |
Использование компонента | 205 |
Использование Dispose в компонентах | 210 |
Контейнеры | 210 |
Использование элементов | 211 |
Проблемы многопоточности | 216 |
Контроль версии | 218 |
Знакомство с СОМ | 222 |
Упрощенный способ создания компонентов СОМ | 223 |
Создание полноценных компонентов СОМ | 223 |
Использование компонента СОМ из управляемого кода | 225 |
СОМ+ | 227 |
Сравнение СОМ+ с Enterprise JavaBeans | 227 |
Класс ServicedComponent | 228 |
Технология ObjectSpaces | 237 |
Итоги | 237 |
|
Глава 11 • Распространение и установка приложений | 238 |
|
Снова о сборках | 238 |
Построение многофайловых сборок | 238 |
Сравнение сборок с файлами JAR | 238 |
Установка простым копированием | 239 |
САВ-файлы | 239 |
Программа установки | 239 |
Построение установочного пакета | 240 |
Включение .NET в установочный пакет | 242 |
Настройка процесса установки | 242 |
Создание установочного пакета для ASP.NET | 246 |
Запуск из Internet Explorer | 246 |
Проблемы безопасности | 247 |
Изолированное хранилище | 248 |
Установка в глобальный кэш сборок | 249 |
Установка в Проводнике Windows | 250 |
Утилита gacutil | 251 |
Включение сборок в GAC в процессе установки | 251 |
Динамические свойства | 252 |
Использование динамических свойств в Visual Studio .NET | 252 |
Сравнение динамических свойств с ресурсными пакетами свойств Java | 256 |
Установочные компоненты | 257 |
Использование установочных компонентов | 257 |
Итоги | 262 |
|
Глава 12 • Обмен данными через Message Queuing | 263 |
|
Конфигурация Message Queuing | 263 |
Создание очереди из панели управления | 264 |
Создание очереди в окне Server Explorer | 266 |
Сравнение двух способов | 266 |
Работа с Message Queuing на программном уровне | 267 |
Создание очереди | 267 |
Создание отправителя | 267 |
Создание получателя | 268 |
Транзакции | 269 |
Идентификация очередей | 276 |
Сравнение Message Queuing с JMS | 276 |
Установочный компонент Message Queuing | 277 |
Итоги | 278 |
|
Глава 13 • Интерфейс Active Directory Service | 279 |
|
Чтение данных из каталога | 279 |
Добавление и модификация данных в каталоге | 281 |
Поставщики данных | 283 |
WinNT | 283 |
LDAP | 283 |
NDS и NWCOMPAT | 284 |
IIS | 284 |
Сравнение ADSI с JNDI | 285 |
Итоги | 285 |
|
Глава 14 • Программирование служб Windows | 286 |
|
Создание службы Windows | 286 |
Отладка | 290 |
Подключение отладчика | 291 |
Использование фиктивной службы для упрощения отладки | 293 |
Обработчики команд SCM | 293 |
Запуск и остановка | 293 |
Приостановка и продолжение | 294 |
Завершение работы системы | 294 |
События управления питанием | 294 |
Настройка команд | 294 |
Запись в журналы событий | 295 |
Создание нестандартных журналов событий | 295 |
Установочный компонент EventLoglnstaller | 296 |
Счётчики производительности | 296 |
Создание установочных проектов для служб Windows | 300 |
Режим запуска | 300 |
Настройка учетной записи | 300 |
Итоги | 300 |
|
Глава 15 • Взаимодействие с внешним кодом | 301 |
|
Платформенный вызов | 301 |
Сигнатуры управляемых функций | 302 |
Маршалинг параметров | 303 |
Маршалинг структур | 304 |
Функции обратного вызова | 305 |
Программирование небезопасного кода | 307 |
Проблемы с указателями | 307 |
Пример небезопасного кода | 308 |
Небезопасный код и PInvoke | 310 |
Выделение памяти из стека | 311 |
Загрузка .NET Runtime | 312 |
Подробнее о функции CorBindToRuntimeEx | 315 |
Выполнение кода в домене приложения | 316 |
Итоги | 317 |
|
Глава 16 • Переход на платформу .NET | 318 |
|
JUMP | 318 |
Java Language Conversion Assistant | 318 |
Visual J# | 319 |
Общие стратегии перехода | 321 |
Создание новых проектов в .NET | 321 |
Адаптация существующих проектов | 322 |
Переход на .NET для продолжения разработки существующих проектов | 322 |
Итоги | 323 |
|
Алфавитный указатель | 324 |