название:CLR via C# автор:Джеффри Рихтер Издательство: Питер Серия или Выпуск: Мастер-класс ISBN: 978-5-91180-303-2 Год: 2007 Формат: DJVU Размер: 8 Mb Download Эта книга - подробное описание внутреннего устройства и функционирования общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 2.0. В ней раскрыта система типов .NET Framework и разъяснены способы управления ими. Представлены концепции программирования с широким использованием библиотеки FCL, относящиеся ко всем языкам, ориентированным на работу с .NET Framework. Особое внимание уделено обобщениям, управлению асинхронными операциями и синхронизации потоков. Книга ориентирована на разработчиков любых видов приложений на платформе с .NET Framework: Windows Forms, Web Forms, Web-сервисов, консольных приложений и пр. Книга состоит из 24 глав. Содержание Введение Платформа разработки: .NET Framework Среда разработки: Microsoft Visual Studio Цель этой книги />Примеры кода и системные требования В этой книге нет ошибок Благодарности Поддержка Предисловие Часть I Основы CLR Глава 1 Модель выполнения кода в среде CLR Компиляция исходного кода в управляемые модули Объединение управляемых модулей в сборку Загрузка CLR Исполнение кода сборки IL и верификация Небезопасный код IL и защита интеллектуальной собственности NGen.exe - генератор объектного кода Библиотека классов .NET Framework Общая система типов Общеязыковая спецификация Взаимодействие с неуправляемым кодом Глава 2 Компоновка, упаковка, развертывание и администрирование приложений и типов Задачи развертывания в .NET Framework Компоновка типов в модуль Файл параметров Несколько слов о метаданных Объединение модулей для создания сборки Добавление сборок в проект в среде Visual Studio Использование утилиты Assembly Linker Включение в сборку файлов ресурсов Ресурсы со сведениями о версии сборки Номера версии Региональные стандарты Развертывание простых приложений (закрытое развертывание сборок) Простое средство администрирования (конфигурационный файл) Глава 3 Совместно используемые сборки и сборки со строгим именем Два вида сборок - два вида развертывания Назначение сборке строгого имени Глобальный кеш сборок Внутренняя структура GAC Компоновка сборки, ссылающейся на сборку со строгим именем Устойчивость сборок со строгими именами к несанкционированной модификации Отложенное подписание Закрытое развертывание сборок со строгими именами Как исполняющая среда разрешает ссылки на типы Дополнительные административные средства (конфигурационные файлы) Управление версиями при помощи политики издателя Часть II Работаем с типами Глава 4 Основы типов Все типы - производные от System.Object Приведение типов Приведение типов в C# с помощью операторов is и as Пространства имен и сборки Как разные компоненты взаимодействуют во время выполнения Глава 5 Элементарные, ссылочные и значимые типы Элементарные типы в языках программирования Проверяемые и непроверяемые операции для элементарных типов Ссылочные и значимые типы Упаковка и распаковка значимых типов Изменение полей в упакованных размерных типах посредством интерфейсов Равенство и тождество объектов Хеш-коды объектов Часть III Проектирование типов Глава 6 Основные сведения о членах и типах Члены типа Видимость типа Дружественные сборки Доступ к членам Статические классы Частичные классы, структуры и интерфейсы Компоненты, полиморфизм и версии Вызов виртуальных методов, свойств и событий в CLR Разумное использование видимости типов и модификаторов доступа к членам Работа с виртуальными методами при управлении версиями типов Глава 7 Константы и поля Константы Поля Глава 8 Методы: конструкторы, операторы, преобразования и параметры Конструкторы экземпляров и классы (ссылочные типы) Конструкторы экземпляров и структуры (значимые типы) Конструкторы типов Производительность конструкторов типа Методы перегруженных операторов Операторы и взаимодействие языков программирования Методы операторов преобразования Передача методу параметров по ссылке Передача методу переменного числа параметров Объявление типов параметров метода Методы-константы и параметры-константы Глава 9 Свойства Свойства без параметров Осторожный подход к определению свойств Свойства с параметрами Производительность при вызове аксессоров свойств Доступность аксессоров свойств Обобщенные методы-аксессоры свойств Глава 10 События Проектирование типа, поддерживающего событие Этап 1: определение типа, который будет хранить всю дополнительную информацию, передаваемую получателям уведомления о событии Этап 2: определение члена-события Этап 3: определение метода, ответственного за уведомление зарегистрированных объектов о событии Этап 4: определение метода, транслирующего входную информацию в желаемое событие Как реализуются события Создание типа, отслеживающего событие События и безопасность потоков Явное управление регистрацией событий Конструирование типа с множеством событий Часть IV Важнейшие типы Глава 11 Символы, строки и обработка текста Символы Тип System.String Создание строк Строки не изменяются Сравнение строк Интернирование строк Создание пулов строк Работа с символами и текстовыми элементами в строке Прочие операции со строками Эффективное создание строки динамически Создание объекта StringBuilder Члены StringBuilder Получение строкового представления объекта Форматы и региональные стандарты Форматирование нескольких объектов в одну строку Создание собственного средства форматирования Получение объекта посредством разбора строки Кодировки: преобразования между символами и байтами Кодирование и декодирование потоков символов и байт Кодирование и декодирование строк в кодировке Base-64 Защищенные строки Глава 12 Перечислимые типы и битовые флаги Перечислимые типы Битовые флаги Глава 13 Массивы Приведение типов в массивах Все массивы неявно наследуют классу System.Array Все массивы неявно реализуют IEnumerable, ICollection и IList Передача и возврат массивов Создание массивов с ненулевой нижней границей Производительность доступа к массиву Небезопасный доступ к массивам и массивы фиксированного размера Глава 14 Интерфейсы Наследование в классах и интерфейсах Определение интерфейсов Наследование интерфейсов Подробнее о вызовах интерфейсных методов Явные и неявные реализации методов интерфейса (что происходит за кулисами) Обобщенные интерфейсы Обобщения и ограничение интерфейса Реализация нескольких интерфейсов с одинаковыми сигнатурами и именами методов Улучшение контроля типов при помощи явной реализации методов интерфейса Осторожно с явной реализацией методов интерфейсов! Дилемма проектировщика: базовый класс или интерфейс? Глава 15 Делегаты Знакомство с делегатами Использование делегатов для обратного вызова статических методов Использование делегатов для обратного вызова экземплярных методов Правда о делегатах Использование делегатов для обратного вызова множественных методов (цепочки делегатов) Поддержка цепочек делегатов в C# Расширенное управление цепочкой делегатов Упрощение синтаксиса работы с делегатами в C# Упрощенный синтаксис № 1: не нужно создавать объект-делегат Упрощенный синтаксис № 2: не нужно определять метод обратного вызова Упрощенный синтаксис № 3: не нужно определять параметры метода обратного вызова Упрощенный синтаксис № 4: не нужно вручную создавать обертку локальных переменных класса для передачи их в метод обратного вызова Делегаты и отражение Глава 16 Обобщения Обобщения в библиотеке FCL Библиотека Power Collections от Wintellect Инфраструктура обобщений Открытые и закрытые типы Обобщенные типы и наследование Проблемы с идентификацией и тождеством обобщенных типов "Распухание" кода Обобщенные интерфейсы Обобщенные делегаты Обобщенные методы Логический вывод обобщенных методов и типов Обобщения и другие члены Верификация и ограничения Основные ограничения Дополнительные ограничения Ограничения конструктора Другие вопросы верификации Глава 17 Нестандартные атрибуты Применение нестандартных атрибутов Определение собственного класса атрибутов Конструктор атрибута и типы данных полей/свойств Обнаружение использования нестандартных атрибутов Сравнение двух экземпляров атрибута Обнаружение использования нестандартных атрибутов без создания объектов, производных от Attribute Условные атрибутные классы Глава 18 Значимые типы, допускающие присвоение null Поддержка значимых типов, допускающих присвоение null, в C# Оператор интеграции null в языке C# CLR обеспечивает специальную поддержку значимых типов, допускающих присвоение null Упаковка значимых типов, допускающих присвоение null Распаковка значимых типов, допускающих присвоение null Вызов GetType через значимый тип, допускающий присвоение null Вызов интерфейсных методов через значимый тип, допускающий присвоение null Часть V Средства CLR Глава 19 Исключения Эволюция обработки исключений Механика обработки исключений Блок try Блок catch Блок finally Общеязыковая спецификация (CLS) и исключения, отличные от CLS-совместимых Что же это такое - исключение? Класс System.Exception Классы исключений, определенные в FCL Генерация исключений Определение собственных классов исключений Как правильно использовать исключения Проверяйте аргументы своих методов Блоков finally не должно быть слишком много Не всякое исключение следует перехватывать Корректное восстановление после исключения Отмена незавершенных операций при невосстановимых исключениях Сокрытие деталей реализации для сохранения контракта Вопросы быстродействия Необработанные исключения Трассировка стека при исключениях Отладка исключений Глава 20 Автоматическое управление памятью (сбор мусора) Основы работы платформы, поддерживающей сбор мусора Выделение ресурсов из управляемой кучи Алгоритм сбора мусора Сбор мусора и отладка Использование завершения для освобождения машинных ресурсов Гарантированное завершение с использованием типов CriticalFinalizerObject Тип SafeHandle и его производные Взаимодействие с неуправляемым кодом с помощью типов SafeHandle Применение завершения к управляемым ресурсам Когда вызываются методы Finalize Внутренний механизм завершения Модель освобождения ресурсов: принудительная очистка объекта Использование типов, поддерживающих модель освобождения ресурсов Оператор using языка C# Интересная проблема с зависимостью Ручной мониторинг и управление временем жизни объектов Воскрешение Поколения Другие возможности сборщика мусора по работе с машинными ресурсами Прогнозирование успеха операции, требующей много памяти Управление сборщиком мусора из программ Другие вопросы производительности сборщика мусора Выделение памяти без синхронизации Масштабируемый параллельный сбор мусора Параллельный сбор мусора Большие объекты Мониторинг сбора мусора Глава 21 Хостинг CLR и домены приложения (AppDomains) Хостинг CLR Домены приложения Доступ к объектам из другого AppDomain Выгрузка доменов AppDomain Как хосты используют домены AppDomain Консольные приложения и приложения Windows Forms Microsoft Internet Explorer Web-формы ASP.NET и Web-сервисы XML Microsoft SQL Server 2005 Будущее и мечты Другие методы управления хостом Управление CLR с помощью управляемого кода Создание надежного приложения-хоста Как поток возвращается в хост Глава 22 Загрузка сборок и отражение Загрузка сборок Использование отражения для создания динамически расширяемых приложений Производительность отражения Обнаружение типов, определенных в сборке Что же из себя представляет объект-тип Создание иерархии типов, производных от Exception Создание экземпляра типа Создание приложений с поддержкой подключаемых компонентов Использование отражения для обнаружения членов типа Обнаружение членов типа BindingFlags: фильтрация типов возвращаемых членов Обнаружение интерфейсов типа Вызов членов типа Один раз привяжись, семь раз вызови Использование описателей привязки для уменьшения рабочего набора Глава 23 Асинхронные операции Потоки Windows в CLR К вопросу об эффективном использовании потоков Пул потоков в CLR Ограничение числа потоков в пуле Использование пула потоков для выполнения асинхронных вычислительных операций Использование выделенного потока для выполнения асинхронной операции Периодическое выполнение асинхронной операции История трех таймеров Модель асинхронного программирования Использование модели APM для выполнения асинхронного ввода-вывода Три метода стыковки в модели APM Стыковка с использованием ожидания завершения Стыковка с использованием регулярного опроса Стыковка путем обратного вызова метода Использование модели APM для выполнения асинхронных вычислительных операций Модель APM и исключения Важные замечания о модели APM Контексты выполнения Глава 24 Синхронизация потоков Целостность памяти, временный доступ к памяти и volatile-поля Временная запись и чтение Поддержка volatile-полей в C# Семейство Interlocked-методов Класс Monitor и блоки синхронизации "Отличная" идея Реализация "отличной" идеи Использование класса Monitor для управления блоком синхронизации Способ синхронизации, предлагаемый Microsoft Упрощение кода C# при помощи оператора lock Способ синхронизации статических членов, предлагаемый Microsoft Почему же "отличная" идея оказалась такой неудачной Знаменитый способ блокировки с двойной проверкой Класс ReaderWriterLock Использование объектов ядра Windows в управляемом коде Вызов метода при освобождении одного объекта ядра
|