|
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Эндрю Троелсен atroelsen@IntetechTraining.com;
- ЧАСТЬ 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
- Резюме
|
|