Основная цель этой книги - дать читателю прочные знания синтаксиса и семантики C#, а также разобрать особенности архитектуры .NET. После ее прочтения вы познакомитесь со всеми основными областями, охваченными библиотекой базовых классов C#. Для приобретения практических навыков книга содержит множество примеров, иллюстрирующих излагаемый материал. Для работы с книгой не нужен какой-либо предварительный опыт работы с СИ и платформой .NET, однако при ее написании авторы ориентировались на тех разработчиков, которые уже имеют опыт работы с одним из современных языков программирования (C++, Visual Basic, Java или каким-либо другим).
Название: C# и платформа .NET Автор: Троелсен Э. Издательство: Питер Год: 2004 Страниц: 796 Формат: PDF Размер: 40,3 МБ ISBN: 5-318-00750-3 Качество: Хорошее
Содержание:
Предисловие Благодарности Глава 1. Философия .NET Современное состояние дел Как живут программисты, использующие Win32/C Как живут программисты, использующие C++/MFC Как живут программисты, использующие Visual Basic Как живут программисты, использующие Java Как живут СОМ-программисты Как живут программисты, использующие Windows DNA Решение .NET Строительные блоки .NET (CI_R, CTS и CLS) Библиотека базовых классов .NET Преимущества С# Языки программирования .NET Обзор двоичных файлов .NET («сборки») Сборки из одного и нескольких файлов Роль Microsoft Intermediate Language Преимущества IL Роль метаданных Простой пример метаданных Компиляция IL в платформенно-зависимые инструкции Типы .NET и пространства имен .NET Основы Common Language Runtime - среды выполнения .NET Стандартная система типов CTS Классы CTS Структуры CTS Интерфейсы CTS Члены типов CTS Перечисления CTS Делегаты CTS Встроенные типы данных CTS Основы CLS Работа с пространствами имен Важнейшие пространства имен .NET Использование пространств имен в коде приложения Обращения к внешним сборкам Как получить дополнительную информацию о пространствах имен и типах ILDasm.exe Выгрузка в файл иерархии типов и членов сборки Выгрузка в файл вместе с инструкциями IL Просмотр метаданных типов Web-приложение Class Viewer Графическое приложение \VinCV Создание приложений С# с использованием компилятора командной строки Ссылки на внешние сборки Компиляция нескольких исходных файлов Создание приложений С# с использованием интегрированной среды разработки Visual Studio .NET Начало работы со средой Visual Studio .NET Окно Solution Explorer Окно Properties Экономное размещение кода на экране Ссылки на внешние сборки Отладка в Visual Studio .NET Работа с окном Server Explorer Средства для работы с XML Поддержка диаграмм UML Утилита Object Browser Средства для работы с базами данных Встроенная справка Подведение итогов Глава 2. Основы языка С# Анатомия класса С# Как еще можно объявить метод Main() Обработка параметров командной строки Создание объектов: конструкторы Будет ли происходить утечка памяти? Композиция приложения С# Инициализация членов Ввод и вывод с использованием класса Console Средства форматирования строк в С# Структурные и ссылочные типы Структурные и ссылочные типы: исследуем дальше Точка отсчета для любых типов: System. Object Замещение методов System. Object Статические члены System. Object Системные типы данных и псевдонимы С# Избранные заметки о некоторых типах данных От структурного типа к ссылочному типу и наоборот: упаковка и распаковка Значения по умолчанию для встроенных типов данных Константы Циклы в С# Выражение for Выражение foreach/in Выражения while и do/while Средства управления логикой работы программ в С# Дополнительные операторы С# Определение пользовательских методов класса Модификаторы уровня доступа к методам Статические методы и методы экземпляров Статические данные Интересное рядом: некоторые статические члены класса Environment Модификаторы для параметров методов Работа с массивами Многомерные массивы Базовый класс System. Array Работа со строками Управляющие последовательности и вывод служебных символов Применение System. Text. StringBuilder Перечисления С# Базовый класс System. Enum Определение структур в С# Еще раз об упаковке и распаковке Определяем пользовательские пространства имен Применение пространств имен для разрешения конфликтов между именами классов Использование псевдонимов для имен классов Вложенные пространства имен Подведение итогов Глава 3. С# и объектно-ориентированное программирование Формальное определение класса в С# Ссылки на самого себя Определение открытого интерфейса по умолчанию Указание области видимости на уровне типа: открытые и внутренние типы Столпы объектно-ориентированного программирования Инкапсуляция Наследование: отношения «быть» и «иметь» Полиморфизм: классический и для конкретного случая Средства инкапсуляции в С# Реализация инкапсуляции при помощи традиционных методов доступа и изменения Второй способ инкапсуляции; применение свойств класса Внутреннее представление свойств С# Свойства только для чтения, только для записи и статические Псевдоинкапсуляция: создание полей «только для чтения» Статические поля «только для чтения» Поддержка наследования в С# Работа с конструктором базового класса Можно ли производить наследование от нескольких базовых классов Хранение «семейных тайн»: ключевое слово protected Запрет наследования: классы, объявленные как sealed Применение модели включения-делегирования Определение вложенных типов Поддержка полиморфизма в С# Абстрактные классы Принудительный полиморфизм: абстрактные методы Контроль версий членов класса Приведение типов в С# Приведение числовых типов Обработка исключений Генерация исключения Перехват исключений Создание пользовательских исключений, первый этап Создание пользовательских исключений, второй этап Обработка нескольких исключений Блок finally Последние замечания о работе с исключениями Жизненный цикл объектов Завершение ссылки на объект Завершение в подробностях Создание метода удаления для конкретного случая Интерфейс IDisposable Взаимодействие со сборщиком мусора Оптимизация сборки мусора Подведение итогов Глава 4. Интерфейсы и коллекции Программирование с использованием интерфейсов Реализация интерфейса Получение ссылки на интерфейс Интерфейсы как параметры Явная реализация интерфейса Создание иерархий интерфейсов Наследование от нескольких базовых интерфейсов Создание пользовательского нумератора (интерфейсы lEnumerable и IEnumerator) Создание клонируемых объектов (интерфейс ICloneable) Создание сравниваемых объектов (интерфейс IComparable) Сортировка по нескольким идентификаторам (IComparer) Как с помощью специальных свойств сделать сортировку более удобной Пространство имен System. Collections Пространство имен System. Collections. Specialized Применение ArrayList Подведение итогов Глава 5. Дополнительные возможности классов С# Создание пользовательского индексатора Перегрузка операторов Перегрузка операторов равенства Перегрузка операторов сравнения Последние замечания о перегрузке операторов Делегаты Пример делегата Делегаты как вложенные типы Члены System. MulticastDelegate Применение CarDelegate Анализ работы делегата Многоадресность Делегаты, указывающие на обычные функции События Как работают события Прием событий Объекты как приемники событий Реализация обработки событий с использованием интерфейсов Документирование в формате XML Просмотр файла документации в формате XML Создание документации в формате HTML Подведение итогов Глава 6. Сборки, потоки и домены приложений Проблемы с классическими двоичными файлами СОМ Проблема: работа с версиями СОМ Проблема: развертывание приложений СОМ Обзор сборок .NET Сборки из одного и нескольких файлов Логическое и физическое представление сборки Сборки обеспечивают повторное использование кода Сборки - контейнеры для типов В сборках предусмотрены встроенные средства самоописания и контроля версий Сборки определяют контекст безопасности Разные версии сборок могут выполняться параллельно Создание тестовой однофайловой сборки Клиентское приложение С# Клиентское приложение Visual Basic .NET Межъязыковое наследование Подробности манифеста CarUbrary Метаданные и код IL для типов CarLibrary Частные сборки Технология «зондирования» Идентификация частной сборки Частные сборки и файлы конфигурации приложений Процесс загрузки частной сборки в целом Сборки для общего доступа Проблемы с GAC? Общие («сильные») имена сборок Создание сборки для общего пользования Установка сборки в глобальный кэш сборок (GAC) Применение сборки для общего пользования в приложении Политика версий .NET Запись информации о версии Работа с разными версиями SharedAssembly Создаем SharedAssembly версии 2.0 Политика версий .NET по умолчанию Управление загрузкой разных версий сборок Администраторский файл конфигурации Работа с потоками в традиционных приложениях Win32 Проблемы одновременности и синхронизации потоков Что такое домен приложения Работаем с доменами приложений Пространство имен System.Threading Работа с классом Thread Запуск вторичных потоков Именованные потоки Параллельная работа потоков Как «усыпить» поток Одновременный доступ к данным из разных потоков Ключевое слово lock Использование System.Threading.Monitor Применение System.Threading.Interlocked Подведение итогов Глава 7. Рефлексия типов и программирование с использованием атрибутов Что такое рефлексия типов Класс Туре Получение объекта класса Туре Возможности класса Туре Типы пространства имен System.Reflection Загрузка сборки Вывод информации о типах в сборке Вывод информации о членах класса Вывод информации о параметрах метода Применение позднего связывания Класс System.Activator Применение динамических сборок Знакомство с пространством имен System.Reflection.Emit Создаем динамическую сборку Как использовать динамическую сборку Программирование с использованием атрибутов Работа с существующими атрибутами Создание пользовательских атрибутов Как ограничить использование атрибута определенными типами Атрибуты уровня сборки и модуля Файл AssemblyInfo.cs Как работать с атрибутами в процессе выполнения программы Подведение итогов Глава 8. Окна становятся лучше: введение в Windows.Forms Два главных пространства имен для организации графического интерфейса Обзор пространства имен Windows.Forms Взаимодействие с типами Windows.Forms Создание нового проекта Создание главного окна приложения (вручную) Создание проекта WindowsForms Класс System.Windows.Forms.Application Работаем с классом Application Реагируем на событие ApplicationExit Препроцессинг сообщений при помощи класса Application Анатомия формы Классы System.Object и MarshalByRefObject Класс Component Класс Control Настройка стиля формы События класса Control Работаем с классом Control Реагируем на события мыши: часть первая Реагируем на события мыши: часть вторая Реагируем на события клавиатуры Еще немного о классе Control Painting Basics Класс ScrollableControl Класс ContainerControl Класс Form Используем возможности класса Form Создаем меню Вложенный класс MenuSMenuItemCollection Создание системы меню в приложении Добавляем еще одно меню верхнего уровня Создаем контекстное меню Дополнительные возможности меню Создаем меню при помощи IDE Visual Sudio .NET Что такое строка состояния Создаем строку состояния Работаем с классом Timer Отображение в строке состояния подсказок к пунктам меню Создаем панель инструментов Создаем панели инструментов при помощи Visual Studio IDE Создаем набор изображений (объект ImageList) при помощи Visual Studio Пример приложения Windows Forms для работы с реестром и журналом событий Windows 2000 Взаимодействие с системным реестром Взаимодействие с журналом событий Windows 2000 Как считать информацию из журнала событий Подведение итогов Глава 9. Графика становится лучше (GDI+) Обзор пространств имен GDI+ Пространство имен System. Drawing Служебные типы System. Drawing Тип Point(F) Тип Rectangle(F) TnnSize(F) Класс Region Сеансы вывода графики Как сделать клиентскую область вашего приложения «недействительной» Выводим графические объекты без события Paint Возможности класса Graphics Система координат по умолчанию в GDI+ Применение альтернативных единиц измерения Применение альтернативных точек отсчета Работа с цветом Возможности класса ColorDialog Работа со шрифтами Семейства шрифтов Единицы измерения для шрифта Создаем приложение с возможностью выбора шрифта Выводим информацию об установленных шрифтах (System.Drawing.Text) Класс FontDialog Обзор пространства имен System.Drawing.Drawing2D Определение качества вывода графического объекта Работа с перьями Работаем с «наконечниками» перьев Работаем с кистью Работаем со штриховыми кистями Работаем с текстурными кистями Работаем с градиентными кистями Вывод изображений Перетаскивание, проверка попадания в область, занимаемую изображением, и элемент управления PictureBox Еще о проверке попадания Проверка попадания в непрямоугольные области Работа с форматами ресурсов .NET Пространство имен System.Resources Создание файлов *.resx программным образом Чтение из файлов *.resx программным образом Создание файлов *.resources Работаем с типом ResourceWriter Работаем с типом ResourceManager Работа с ресурсами при помощи IDE Visual Studio .NET Подведение итогов Глава 10. Элементы управления Иерархия классов элементов управления Как вручную добавить элементы управления на форму Класс Controls ControlCollection Как добавить элементы управления на форму при помощи Visual Studio Элемент управления TextBox Некоторые возможности TextBox Великая и могучая кнопка (а также родительский класс ButtonBase) Выравнивание текста и изображений относительно краев кнопки Некоторые возможности работы с кнопками Работаем с флажками Работаем с переключателями и группирующими рамками Элемент управления Checked List Box Списки Комбинированные списки Настраиваем порядок перехода по Tab Tab Order Wizard Элемент управления TrackBar Элемент управления MonthCalendar Еще немного о типе DateTime Элементы управления UpDown Элемент управления Panel Всплывающие подсказки (ToolTips) для элементов управления Добавление всплывающей подсказки при помощи графических средств Visual Studio Элемент управления ErrorProvider Закрепление элемента управления в определенном месте формы Стыковка элемента управления с краем формы Создание пользовательских диалоговых окон Пример использования диалогового окна в приложении Как получить данные из диалогового окна Наследование форм Подведение итогов Глава 11. Ввод, вывод и сериализация объектов Знакомство с пространством имен System.IO Типы Directory (Info) и File (Info) Абстрактный класс FileSystemlnfo Работа с типом Directorylnfo Перечисление FileAttributes Получение доступа к файлам через объект Directorylnfo Создаем подкаталоги при помощи класса Directorylnfo Статические члены класса Directory Класс Filelnfo Использование метода FileInfo. Open() Методы FileInfo. OpenRead() и FiieInfo. OpenWrite() Методы FileInfo. OpenText(), FileInfo. CreateText() и Filelnfo. AppendText() Абстрактный класс Stream Работа с объектом FileStream Класс MemoryStream Класс BufferedStream Классы StreamWriter и StreamReader Запись в текстовый файл Считывание информации из текстового файла Класс StringWriter Класс StringReader Работа с двоичными данными (классы Binary Reader и BinaryWriter) Заметки на полях Сохранение объектов в .NET Графы для отношений объектов Настройка объектов для сериализации Выбираем объект Formatter Пространство имен System. Runtime, Serialization, Сериализация в двоичном формате Сериализация в формате SOAP Сериализация в пользовательском формате и интерфейс ISerializable Простой пример пользовательской сериализации Приложение для регистрации автомобилей с графическим интерфейсом Реализация добавления новых объектов Саг Код сериализации Подведение итогов Глава 12. Взаимодействие с унаследованным программным кодом Главные вопросы совместимости Пространство имен System. Runtime. InteropServices Взаимодействие с модулями DLL, созданными на C Поле ExactSpelUng Поле CharSet: Поля CallingConvention и EntryPoint Взаимодействие .NET и СОМ Представление типов СОМ как типов .NET Управление ссылками на объекты сокласса Сокрытие низкоуровневых интерфейсов СОМ Создание простого СОМ-сервера в Visual Basic 6.0 Что находится в IDL нашего СОМ-сервера Создаем простой клиент СОМ в Visual Basic 6.0 Импорт библиотеки типов Добавление ссылки на сборку Раннее связывание с СОМ-классом CoCalc Позднее связывание с соклассом CoCalc Особенности созданной нами сборки Создаем СОМ-сервер при помощи ATL Добавление методов в интерфейс по умолчанию Генерация события СОМ Генерация ошибки СОМ Представление внутренних подобъектов и применение SAFEARRAY Последний штрих: создаем перечисление IDL Клиент СОМ-сервера в Visual Basic 6.0 Создаем сборку и анализируем процесс преобразования Преобразование библиотеки типов Преобразование интерфейсов СОМ Преобразование атрибутов параметров в коде IDL Преобразование иерархии интерфейсов Преобразование соклассов и свойств СОМ Преобразование перечислений СОМ Преобразование COM SAFEARRAY Перехват событий СОМ Обработка ошибки СОМ Полный код клиента С# Обращение клиента СОМ к сборке .NET Роль CCW Понятие интерфейса класса Определяем интерфейс класса Создание типа .NET Генерация библиотеки типов и регистрация типов .NET Анализ созданной библиотеки типов Интерфейс _Object Сгенерированное выражение библиотеки Просмотр типов .NET в OLE/COM Object Viewer Просмотр записей в реестре Создаем клиента в Visual Basic 6.0 Некоторые особенности отображения типов .NET в СОМ Анализ кода СОМ, сгенерированного для базового класса Анализ кода СОМ, сгенерированного для производного класса Управление процессом генерации кода IDL (как повлиять на то, что делает утилита tlbexp.exe) Что у нас получилось Управление регистрацией промежуточного модуля CCW Взаимодействие со службами СОМ+ Пространство имен System. EnterpriseServices Особенности создания типов .NET для работы под СОМ+ Пример класса С# для работы под СОМ+ Добавление атрибутов уровня сборки для СОМ+ Помещаем сборку в каталог СОМ+ Проверяем установку при помощи Component Services Explorer Подведение итогов Глава 13. Доступ к данным при помощи ADO .NET Почему потребовалось создавать ADO .NET ADO .NET: общая картина Знакомство с пространствами имен ADO .NET Типы пространства имен System. Data Тип DataColuran Создаем объект DataColumn Добавляем объект DataColumn в DataTable Делаем столбец первичным ключом таблицы Настройка автоматического увеличения значений для столбцов Настраиваем представление столбца в формате XML Тип DataRow Работа со свойством DataRow. RowState Работа со свойством ItemArray Тип DataTable Создаем объект DataTable Удаляем строки из таблицы Применение фильтров и порядка сортировки для DataTable Внесение изменений в строки Тип Data View Возможности класса DataSet Члены класса DataSet Создание объекта DataSet Моделируем отношения между таблицами при помощи класса DataRelation Переход между таблицами, участвующими в отношении Чтение и запись объектов DataSet в формате XML Создание примера простой базы данных Управляемые провайдеры ADO .NET Управляемый провайдер OLE DB.' Установление соединения при помощи типа OleDbConnection Построение команды SQL Работа с OlcDbDataReader Подключение к базе данных Access Выполнение хранимых процедур Тип OleDbDataAdapter Заполнение данными объекта DataSet при помощи OleDbDataAdapter Работа с управляемым провайдером SQL Пространство имен System. Data. SqlTypes Вставка новых записей при помощи SqlDataAdapter Изменение записей в таблице при помощи SqlDataAdapter Автоматическое создание команд SQL Заполнение объекта DataSet с несколькими таблицами «л добавление объектов DataRelations; Подведение итогов Глава 14. Разработка web-приложений и ASP .NET Web-приложения и web-серверы Что такое виртуальные каталоги Структура документа HTML Форматирование текста средствами HTML Заголовки HTML HTML-редактор Visual Studio .NET Разработка форм HTML Создаем пользовательский интерфейс Добавление изображений Клиентские скрипты Пример клиентского скрипта Реализация проверки введенных пользователем данных Передаем данные формы (методы GET и POST) Синтаксис строки запроса HTTP Создание классической страницы ASP Принимаем данные, переданные методом POST Первое приложение ASP .NET Некоторые проблемы классических ASP Некоторые преимущества ASP .NET Пространства имен ASP .NET Наиболее важные типы пространства имен System.Web Приложение и сеанс подключения пользователя Создание простого web-приложения на С# Исходный файл *.aspx Файл web.config Исходный файл Global.asax Простой код ASP .NET на С# Архитектура web-приложения ASP .NET Тип System. Web.UI.Page Связка *.aspx/Codebehind Свойство Page.Request Свойство Page.Respon.se Свойство Page.Application Отладка и трассировка приложений ASP .NET Элементы управления WebForm Создание элементов управления WebForm Иерархия классов элементов управления WebForm Виды элементов управления WebForm Базовые элементы управления WebForm Элементы управления с дополнительными возможностями Элементы управления для работы с источниками данных Элементы управления для проверки вводимых пользователем данных Обработка событий элементов управления WebForm Подведение итогов Глава 15. Web-службы Роль web-служб Инфраструктура web-службы Протокол подключения Служба описания Служба обнаружения Обзор пространств имен web-служб Пространство имен System.Web.Services Пример элементарной web-службы Исходный файл С# для web-службы (*.asmx.cs) Реализуем методы web-службы Работа клиента с web-службой Тип Web Method Attribute Базовый класс System. Web.Services.WebService Web Service Description Language (WSDL) Протоколы подключения к web-службам Обмен данными при помощи HTTP-GET и HTTP-POST Обмен данными при помощи SOAP Прокси-сборки для web-служб Создание прокси-сборки при помощи утилиты wsdl.exe Компилируем прокси-сборку Создание клиента для работы через прокси-сборку Создание прокси-сборки в Visual Studio .NET Пример более сложной web-службы (и ее клиентов) Сериализация пользовательских типов Настраиваем клиента web-службы Создание типов для сериализации (некоторые уточнения) Протокол обнаружения web-службы Добавление новой web-службы Подведение итогов Алфавитный указатель