На практических примерах рассмотрено программирование на языке Microsoft C# 4.0, начиная с основ языка и заканчивая решением типичных задач с помощью .NET Framework. Показано создание эффективных классов, интерфейсов и типов, а также программного кода, допускающего многократное использование. Описаны приемы обработки данных, основанные на применении коллекций, сериализации, баз данных и XML. Рассмотрена реализация пользовательского интерфейса с применением технологий WinForms и WPF, а также создание веб-приложений на основе технологий ASP.NET и Silverlight. Показано применение на практике новых возможностей языка C# 4.0. Уделено внимание взаимодействию с ОС Windows и системным ПО, использованию шаблонов для разработки сложных программ и др. Приведено более 200 готовых решений, оптимальных технических приемов и примеров проверенного кода.
Об авторе Благодарности Введение Краткий обзор книги Как извлечь максимум пользы из этой книги Как углубить и расширить свои знания ЧАСТЬ I. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С# Глава 1. Основы работы с типами Создание класса Определение полей, свойств и методов Определение статических членов Написание конструктора Инициализация свойств при конструировании Применение модификаторов const и readonly Повторное использование кода в нескольких конструкторах Создание производного класса Вызов конструктора базового класса Переопределение метода или свойства базового класса Создание интерфейса Реализация интерфейсов Создание структуры Создание анонимного типа Предотвращение создания экземпляра с помощью абстрактного класса Интерфейс или абстрактный базовый класс? Глава 2. Создание типов с разносторонней функциональностью Форматирование типа методом ToString() Создание типов, допускающих выяснение равенства Создание типов, хешируемых методом GetHashCode() Создание сортируемых типов Создание индекса у типов Уведомление клиентов об изменении состояния объекта Перегрузка операций Преобразование одного типа в другой Предотвращение наследования Разрешение типу значения принимать значение null Глава 3. Общие принципы кодирования Объявление переменных Откладывание проверки типов до этапа выполнения (динамические типы) Применение динамической типизации для упрощения взаимодействия с СОМ Объявление массивов Создание многомерных массивов Создание псевдонима для пространства имен Применение условной операции (?:) Применение операции проверки на null (??) Добавление методов в существующие типы с использованием методов расширения Вызов методов с параметрами по умолчанию Вызов методов с именованными параметрами Откладывание вычисления значения до момента обращения к нему Создание контрактов кода Глава 4. Исключения Возбуждение исключения Обработка исключения Обработка нескольких исключений Повторное возбуждение исключения Практически гарантированное выполнение кода с использованием блока finally Получение информации от исключения Создание собственного исключения Перехват необработанных исключений Советы по работе с исключениями Глава 5. Числа Выбор между типами float, double и decimal Работа с очень большими числами (тип Biglnteger) Работа с комплексными числами Форматирование числа в строку Преобразование строки в число Преобразование числа из одной системы счисления в другую Преобразование числа в байты (и обратно) Выяснение четности числа Выяснение, является ли число степенью двойки Выяснение, является ли число простым Подсчет количества установленных битов Пересчет градусов в радианы Округление Генерирование "хороших" случайных чисел Генерирование уникальных идентификационных номеров (GUID) Глава 6. Перечисления Объявление перечисления Объявление флагов в виде перечисления Выяснение, установлен ли флаг Преобразование перечисления в целое (и обратно) Проверка допустимости значений перечисления Получение списка значений перечисления Преобразование строки в перечисление Добавление метаданных к перечислению с помощью методов расширения Советы по использованию перечислений Глава 7. Строки Преобразование строки в байтовое представление (и обратно) Создание собственной схемы кодирования Корректное сравнение строк Корректная смена регистра Распознавание пустых строк Конкатенация строк: обязательно ли использовать класс StringBidlder? Конкатенация элементов коллекции в одну строку Добавление символа новой строчки Разбивка строки Преобразование двоичных данных в строку (кодировка base-64) Изменение порядка слов на обратный Естественная сортировка строк Глава 8. Регулярные выражения Поиск в тексте Извлечение фрагментов текста Замена фрагмента текста Проверка допустимости Повышение производительности регулярных выражений Глава 9. Универсальные типы Создание универсального списка Создание универсального метода Создание универсального интерфейса Создание универсального класса Создание универсального делегата Работа с несколькими универсальными типами Накладывание ограничений на универсальный тип Преобразование IEnumerable<string> в IEnumerable<object> (ковариантность) Преобразование IComparer<Child> в IComparer<Parent> (контравариантность) Создание кортежей (пар, троек и т. д.) ЧАСТЬ И. ОБРАБОТКА ДАННЫХ Глава 10. Коллекции Выбор подходящего класса-коллекции Инициализация коллекции Перебор элементов коллекции без привязки к ее реализации Создание собственной коллекции Создание собственных итераторов для коллекции Изменение порядка элементов массива на обратный Изменение порядка элементов связного списка на обратный Извлечение уникальных элементов из коллекции Подсчет количества вхождений элемента Реализация очереди с приоритетами Создание префиксного дерева Глава 11. Файлы и сериализация Создание, чтение и запись файла Удаление файла Комбинирование потоков данных (сжатие файла) Выяснение размера файла Получение информации, связанной с безопасностью Проверка существования файла и каталога Список дисков Список каталогов и файлов Обзор каталогов Поиск файла или каталога Манипуляции с путями к файлам Создание уникальных или временных имен для файлов Отслеживание изменений в файловой системе Получение пути к каталогам My Documents, My Pictures и т. д Сериализация объектов Сериализация в буфер в памяти Хранение данных приложения, имеющего ограниченные права Глава 12. Работа в сетях и во Всемирной паутине Определение IP-адреса по имени хоста Выяснение имени хоста и IP-адреса у данного компьютера "Пингование" компьютера Выяснение информации о сетевой карте Создание сервера и клиента на базе TCP/IP Отправка электронного письма по протоколу SMTP Загрузка содержимого веб-страницы по протоколу HTTP Выгрузка файла по протоколу FTP Удаление тегов из HTML-кода Встраивание веб-браузера в приложение Прием RSS-ленты новостей Динамическое генерирование RSS-ленты новостей в IIS Взаимодействие между процессами на одном компьютере (WCF) Взаимодействие между двумя компьютерами в одной сети (WCF) Взаимодействие через Интернет (WCF) Обнаружение служб на этапе выполнения (WCF) Глава 13. Базы данных Создание базы данных в Visual Studio Соединение с базой и чтение данных Добавление данных в таблицу Удаление данных из таблицы Выполнение хранимой процедуры Транзакции Связывание данных с элементом управления при помощи класса DataSet Выяснение доступности соединения с базой данных Автоматическое отображение данных на объекты с помощью платформы Entity Framework Глава 14. Язык XML Сериализация объекта в XML и десериализация его Создание XML-документа "с нуля" Чтение XML-файла Проверка корректности XML-документа Выдача запроса к XML-документу с помощью XPath Преобразование информации из базы данных в XML-документ Преобразование XML-документа в HTML-документ ЧАСТЬ III. Взаимодействие с пользователем Глава 15. Делегаты, события и анонимные методы Динамический вызов метода Подписка на событие Публикация события Гарантия обновления пользовательского интерфейса в потоке пользовательского интерфейса Присваивание анонимного метода делегату Использование анонимных методов в качестве простых обработчиков событий Использование преимуществ контравариантности Глава 16. Технология Windows Forms Создание модальных и немодальных форм Добавление строки меню Динамический перевод пунктов меню в неактивное состояние Добавление строки состояния Добавление панели инструментов Создание интерфейса, включающего в себя подокно Наследование формы Создание собственного элемента управления Применение таймера Использование общих и пользовательских настроек конфигурации Эффективное использование элемента ListView в виртуальном режиме Наклон колесика мыши для горизонтальной прокрутки Реализация Cut и Paste Автоматический сброс индикатора ожидания Глава 17. Графика с применением Windows Forms и GDI+ Определение цвета Использование системного элемента управления для выбора цвета Преобразование цветов между системами RGB и HSV Рисование фигур Создание перьев Создание кистей с произвольными характеристиками Преобразования Рисование текста Расположение текста по диагонали Вывод изображений Вывод прозрачных изображений Рисование в буфере Прямое обращение к пикселам для повышения эффективности Рисование со сглаживанием Перерисовка без мерцания Изменение размеров изображения Создание миниатюры Захват многоэкранного изображения Вычисление расстояния от указателя мыши до заданной точки Выяснение местоположения точки относительно прямоугольника Выяснение местоположения точки относительно круга Выяснение местоположения точки относительно эллипса Выяснение факта пересечения двух прямоугольников Печать и предварительный просмотр Глава 18. WPF Открытие окна Выбор компоновки интерфейса Добавление Строки меню Добавление строки состояния Добавление панели инструментов Использование стандартных команд Использование нестандартных команд Перевод команд из неактивного состояния в активное и обратно Сворачивание и разворачивание группы элементов управления Реагирование на события Отделение внешнего вида от функциональности Применение триггеров для смены стилей на этапе выполнения Связывание свойств элемента управления с другим объектом Форматирование значений при связывании данных Преобразование типов значений при связывании данных Связывание с коллекцией Контроль за представлением связанных данных Определение внешнего вида элементов управления с помощью шаблонов Анимирование свойств элементов Отображение трехмерной графики Размещение видео на поверхности трехмерной фигуры Размещение интерактивных элементов управления на поверхности трехмерной фигуры Применение WPF в приложении WinForms Применение WinForms в WPF-приложении Глава 19. ASP. NET Просмотр отладочной и трассировочной информации Выяснение возможностей браузера Перенаправление на другую страницу Аутентификация с помощью формы для входа пользователя в систему Использование главных страниц для достижения единства оформления Добавление меню Связывание данных с элементом управления GridView Создание пользовательского элемента управления Создание гибкого пользовательского интерфейса с элементами Web Parts Создание простой страницы с использованием технологии AJAX Проверка допустимости данных Поддержание состояния приложения Поддержание состояния пользовательского интерфейса Поддержание пользовательских данных на протяжении сеанса Сохранение состояния сеанса Восстановление состояния сеанса с помощью cookie Использование надстройки MVC над ASP. NET Глава 20. Silverlight Создание проекта Silverlight Воспроизведение видео Создание индикатора загрузки и воспроизведения Реакция пользовательского интерфейса на события таймера Создание трехмерной перспективы для содержимого страницы Выполнение приложения за пределами браузера Захват изображения с веб-камеры Распечатка документа ЧАСТЬ IV. Более сложные элементы языка C# Глава 21. LINQ Запрос к коллекции объектов Упорядочивание результатов Фильтрование коллекции Получение коллекции на основе отдельных полей объектов (проекция) Выполнение объединения Запрос к XML-документу Создание XML-документа Запрос к Entity Framework Запрос к веб-службе (LINQ to Bing) Ускорение запросов с помощью PLINQ (Parallel LENQ) Глава 22. Управление памятью Измерение объема памяти, нужного приложению Освобождение неуправляемых ресурсов с помощью финализации Освобождение управляемых ресурсов с помощью шаблона Dispose Принудительная сборка мусора Создание кэша, позволяющего выполнять сборку мусора Работа с указателями Ускорение доступа к массивам Предотвращение перемещения объектов в памяти Выделение неуправляемой памяти Глава 23. Потоки выполнения. Асинхронное и параллельное программирование Распределение работы между несколькими процессорами Использование структур данных в разных потоках выполнения Асинхронный вызов метода Работа с пулом потоков выполнения Создание потока выполнения Обмен данными с потоком выполнения Защита данных, используемых в нескольких потоках выполнения Применение методов класса Interlocked вместо блокировок Защита данных в нескольких процессах Ограничение количества экземпляров приложения до одного Ограничение количества потоков выполнения, обращающихся к ресурсу Отправка сигналов потокам выполнения с помощью механизма событий Использование многопотокового таймера Использование блокировки чтения/записи Применение асинхронной модели программирования Глава 24. Применение отражения и создание добавляемых модулей Перечисление типов в сборке Добавление нестандартного атрибута Динамическое создание экземпляра класса Вызов метода динамически созданного экземпляра класса Реализация архитектуры с добавляемыми модулями Глава 25. Шаблоны приложений и полезные советы по проектированию Применение секундомера для профилирования кода Пометка устаревшего кода Объединение нескольких событий в одно Реализация шаблона с наблюдателем (подписчиком) Использование брокера событий Запоминание местоположения на экране Реализация отмены с помощью командных объектов Применение модели Model-View-ViewModel в технологии WPF Локализация Локализация приложения Windows Forms Локализация приложения ASP. NET Локализация WPF-приложения Локализация Silverlight-приложения Развертывание приложений с использованием ClickOnce Глава 26. Взаимодействие с операционной системой и аппаратной частью Получение информации об операционной системе, пакете обновления и версии CLR Получение информации о ЦПУ и других аппаратных средствах Вызов UАС для запрашивания прав администратора Запись в журнал событий Обращение к Реестру Управление службами Windows Создание службы Windows Вызов низкоуровневых функций Windows с помощью P/Invoke Вызов библиотечных функций, написанных на языке C, из кода на языке C# Работа с файлами, отображенными в память Обеспечение работы приложения в 32-битовом и 64-битовом окружении Реагирование на изменение системной конфигурации Использование некоторых возможностей Windows 7 Получение информации о режиме питания Глава 27. Полезные мелочи Создание непрямоугольного окна Создание информационной пиктограммы Создание хранителя экрана в WPF Вывод заставки Воспроизведение звукового файла Перетасовка карт Приложение. Необходимые инструменты Утилита Reflector Среда NUnit Программа NDepend Программа FXCop Виртуальная машина Утилиты Process Explorer и Process Monitor Программа RegexBuddy Приложение LINQPad Поиск инструментальных средств Предметный указатель