Система Orphus

C#. Сборник рецептов.

Автор: Агуров П.В.
Издательство: БХВ-Петербург, 2007
432 страницы
ISBN: 5-94157-969-1
ISBN: 978-5-94157-969-3

Материал предоставил: Алексей Кирюшкин
Найти в магазинах
Купить в Озоне (292 руб.)
Купить в Books.Ru
Купить в Болеро (267 руб.)

Аннотация

Содержание
Введение
Для кого эта книга
О программном коде
Краткое описание глав
Комментарии

Аннотация

При написании программ особенно важно не тратить время на поиск стандартных решений, а сосредоточиться на решении конкретной задачи, используя готовый эффективный код, разработанный и проверенный коллегой-программистом. В этой книге собраны лучшие рецепты и решения, которые пригодятся вам при разработке программ любой сложности и помогут создать действительно качественный и быстрый код. Вам не потребуется читать множество документации - ведь можно просто взять готовый пример. Книга будет полезна как разработчикам программ на С#, так и тем, кто переходит на язык С# с других языков программирования. На компакт-диске размещены все исходные коды, приведенные в книге.

Содержание

Оглавление
Введение
Для кого эта книга
О программном коде
Краткое описание глав
Благодарности
Обратная связь

Глава 1. Технология .NET

1.1. На каких платформах запускается .NET?
1.2. Какие компиляторы существуют для .NET?
1.3. Можно ли запустить программу без .NET Framework?
1.4. Можно ли вызывать функции Win32 из .NET-программ?
1.5. Проблемы установки Framework
1.6. Ускорение загрузки модулей
1.7. Одновременная установка Visual Studio 2003 и 2005
1.8. Не запускается отладчик в Visual Studio
1.8.1. Ошибка безопасности
1.8.2. Ошибка конфигурирования
1.8.3. Ошибка 401
1.9. Не запускается отладчик в Visual Studio 2005

Глава 2. Вопросы синтаксиса C#

2.1. Как выглядит простая C#-программа?
2.2. Оператор switch можно использовать для строк
2.3. Выходные параметры без инициализации
2.4. Константы и поля ''только для чтения''
2.5. Как определить ссылочный тип?
2.6. Псевдонимы
2.7. Что означает символ @ в начале строки?
2.8. Что означает символ @ перед идентификатором?
2.9. Какая разница между оператором is и методом IsSubclassOf?
2.10. Какая разница между оператором as и прямым приведением типа?
2.11. Какая разница между string и System.String?
2.12. Какая разница между override и new?
2.13. Какая разница между == и Equals?
2.14. Перекрытие операторов
2.15. Как создать наследника, если конструктор класса имеет параметры?
2.16. Что такое делегат?
2.17. В чем разница между полем и свойством?
2.18. Свойство с индексатором
2.19. Можно ли сделать свойство с разным уровнем доступа для get и set?
2.20. Как вызвать методы с одинаковыми именами из интерфейсов?
2.21. В чем разница byte и sbyte?
2.22. Как сгенерировать документацию по коду?
2.23. Как инициализировать поля класса до вызова конструктора?
2.24. Использование переменного числа параметров
2.25. Указатели
2.26. Слабые ссылки
2.27. Файлы ресурсов

Глава 3. Для программистов C++ и Delphi

3.1. Как удалить объекты, созданные с помощью оператора new?
3.2. Как создать экземпляр класса на стеке?
3.3. Почему не вызывается деструктор?
3.4. Почему в операторе if больше нельзя использовать условия типа int?
3.5. Как создать массив констант?
3.6. Как инициализировать массив структур?
3.7. Оператор switch работает не так, как в C++
3.8. Есть ли в C# макросы и препроцессор?
3.9. Как описать битовые поля?

Глава 4. Отражение и связанные с ним вопросы

4.1. Создание объекта по имени типа
4.2. Вызов метода по имени
4.3. Загрузка и создание класса из другой сборки
4.4. Получение списка типов из сборки
4.5. Получение всех свойств класса
4.6. Установка значения private-поля
4.7. Получение списка полей структуры
4.8. Получение полного имени сборки и ее свойств
4.9. Компиляция кода из программы
4.10. Перехват загрузки типов и модулей

Глава 5. Отладка и условная компиляция

5.1. Условная компиляция в режиме отладки
5.2. Методы ASSERT и TRACE
5.3. Перенаправление вывода Trace
5.4. Почему дублируются строки в отладочной информации?
5.5. Трассировка исключения
5.6. Трассировка стека вызовов
5.7. Оценка времени выполнения кода
5.7.1. Измерение с помощью TickCount (наименьшая точность)
5.7.2. Измерение с помощью Ticks (средняя точность)
5.7.3. Измерение с помощью QueryPerformance (высокая точность)
5.8. Как включить полный режим отладки кода?
5.9. Отладочная информация для ASP.NET
5.10. Как отлаживать remoting-код?
5.11. Глобальная обработка исключений

Глава 6. Командная строка, свойства программы, конфигурационные файлы

6.1. Параметры командной строки
6.2. Имя исполняемого файла
6.3. Установка свойства CompanyName
6.4. Конфигурационный файл
6.5. Где найти класс ConfigurationManager?
6.6. Нестандартный конфигурационный файл
6.7. Как заставить программу использовать только Framework 2.0?
6.8. Версия и информация о модуле
6.9. Как обновлять AssemblyInfo для всего проекта сразу?

Глава 7. Преобразования

7.1. Преобразование числа в шестнадцатеричную строку
7.2. Преобразование строки в число
7.3. Преобразование строки с пробелами в число
7.4. Преобразование шестнадцатеричной строки в число
7.5. Преобразование двоичной строки в число
7.6. Преобразование числа в двоичную строку
7.7. Преобразование числа с плавающей точкой в строку
7.8. Преобразование строки в число с плавающей точкой
7.9. Перекодировка текста
7.10. Преобразование в Base64 и обратно
7.11. Преобразование из Win1251 в KOI8 и обратно
7.12. Преобразование цвета в строку и обратно
7.13. Преобразование цвета в HTML-формат
7.14. Преобразование цвета в целое число и обратно
7.15. Преобразование HTML-текста
7.16. Преобразование массива байтов в базовые типы и обратно

Глава 8. Массивы, списки, таблицы, перечисления

8.1. Отображение всех элементов перечисления
8.2. Перевод перечисления в строковый вид и обратно
8.3. Проверка наличия элемента в перечислении
8.4. Одномерные массивы постоянного размера
8.4.1. Изменение размерности массива
8.4.2. Перебор всех элементов массива
8.4.3. Изменение порядка элементов на обратный
8.4.4. Поиск
8.4.5. Копирование элементов массива
8.4.6. Преобразование массива одного типа в массив другого типа
8.5. Многомерные массивы постоянного размера
8.6. Невыровненный массив
8.7. Свойства массивов
8.8. Методы, возвращающие массивы
8.9. Массивы переменного размера
8.10. Массив битов
8.11. Хранение таблицы ''ключ/значение''
8.11.1. Добавление элементов
8.11.2. Отображение содержимого Hashtable
8.11.3. Порядок элементов Hashtable
8.11.4. Удаление элемента из Hashtable
8.11.5. Специальный Hashtable
8.12. Сортированный список
8.13. Очередь
8.14. Стек
8.15. Преобразование IList в ArrayList

Глава 9. Шифрование, кодирование, сжатие, математика

9.1. Вычисление контрольной суммы строки
9.2. Шифрование строк
9.3. Контроль арифметических операций
9.4. Вычисление математических выражений

Глава 10. Строковые и символьные операции

10.1. Проверка символов
10.2. Создание строки одинаковых символов
10.3. Проверка, является ли строка числом
10.4. Проверка, является ли строка допустимой датой
10.5. Разбиение строки по разделителям
10.6. Объединение строк через разделитель
10.7. Какие преимущества дает класс StringBuilder?
10.8. Как сравнить все строки без учета регистра символов?
10.9. Прямая модификация содержимого строки
10.10. Специальные символы в строке

Глава 11. Консольные программы

11.1. Вывод цветного текста
11.2. Задержка закрытия консольной программы
11.3. Перенаправление вывода консольной программы
11.4. Изменение заголовка консольной программы
11.5. Получение размера окна консольной программы

Глава 12. Производительность

12.1. Не кэшируйте соединение с БД
12.2. Используйте StringBuilder
12.3. Используйте Length для проверки пустоты строки
12.4. Не используйте исключения, если это возможно
12.5. Используйте AddRange для добавления групп элементов
12.6. Создавайте Hashtable и ArrayList подходящего размера
12.7. Иногда выгоднее использовать невыровненный массив
12.8. Используйте DataReader для последовательного доступа к данным
12.9. Используйте хранимые процедуры

Глава 13. Списки файлов, каталогов

13.1. Получение списка логических дисков
13.2. Получение списка сетевых дисков
13.3. Список каталогов
13.4. Список каталогов по маске
13.5. Список файлов
13.6. Список файлов по маске
13.7. Создание временного файла

Глава 14. Файловые операции

14.1. Блокирование ошибки ''Устройство не готово''
14.2. Получение списка файлов и каталогов
14.3. Диалог открытия папки
14.4. Основные операции с каталогами
14.5. Основные операции с файлами
14.6. Чтение и установка атрибутов файла
14.7. Создание и чтение бинарного файла
14.8. Создание текстового файла
14.9. Добавление в текстовый файл
14.10. Чтение и запись в файл строк на русском языке
14.11. Посимвольное чтение текстового файла
14.12. Построчное чтение текстового файла
14.13. Чтение файла полностью
14.14. Отслеживание изменений в файловой системе
14.15. Получение короткого имени файла из длинного и наоборот

Глава 15. Сетевая информация и сетевые операции

15.1. Разбор URL на составляющие
15.2. Получение DNS-имени компьютера
15.3. Получение NetBios-имени компьютера
15.4. Получение имени хоста
15.5. Получение списка IP-адресов компьютера
15.6. Перечисление RAS-соединений
15.7. Отправка письма через SMTP
15.7.1. Отправка письма через SMTP с авторизацией
15.7.2. Отправка письма через Pickup-каталог
15.7.3. Задание кодировки сообщения
15.7.4. Отправка письма без использования System.Web.Mail
15.8. Получение списка сетевых дисков
15.9. Получение имени текущего пользователя
15.10. Программная имперсонация
15.11. Как получить список групп домена, в которые входит пользователь?
15.12. Получение файла из Интернета
15.13. Получение данных из Интернета
15.14. Получение Web-страницы
15.15. Использование прокси-сервера
15.16. Подключен ли компьютер к Интернету?
15.17. Как проверить, доступен ли компьютер в сети?
15.18. Как сделать ping?
15.19. Получение файла с FTP через WinInet-функции
15.20. Перечисление компьютеров в сети

Глава 16. Рабочий стол и панель управления

16.1. Что такое IWshRuntimeLibrary и Shell32?
16.2. Создание ярлыка
16.3. Как найти путь к папке автозапуска?
16.4. Регистрация меню запуска программы по расширению
16.5. Доступ к элементам панели управления
16.6. Как получить разрешение экрана?

Глава 17. Потоки

17.1. Запуск и остановка потоков
17.2. Отмена остановки потока
17.3. Изолирование данных потока
17.4. Права потоков
17.5. Идентификаторы потоков
17.6. Пул потоков
17.7. Синхронизация потоков
17.8. Синхронизация потоков: ''один пишет, многие читают''
17.9. Использование AutoResetEvent

Глава 18. Процессы

18.1. Запуск внешних программ
18.2. Блокировка запуска второй копии программы
18.2.1. Вариант 1
18.2.2. Вариант 2
18.3. Информация о процессах
18.4. Определение всех процессов, использующих .NET
18.5. Перечисление всех оконных процессов
18.6. Запуск внешнего процесса и вывод результата на консоль (Windows NT)
18.7. Получение списка модулей, связанных с текущим процессом
18.8. Управление сервисами

Глава 19. Разное

19.1. Перечисление всех принтеров системы
19.2. Установка принтера по умолчанию
19.3. Определение версии операционной системы
19.4. Получение текущей даты и времени
19.5. Установка значения десятичного разделителя
19.6. Определение числа процессоров
19.7. Запись в системный журнал событий
19.8. Создание своего журнала событий
19.9. Как ''отвязать'' программу от журнала событий
19.10. Перечисление доступных журналов событий
19.11. Звуковой сигнал
19.12. Генерация случайного числа
19.13. Принудительная сборка мусора
19.14. Получение пути к папке Framework
19.15. Проигрывание WAV-файла
19.16. Чтение реестра
19.17. Разрешение обращения к реестру
19.18. Сохранение объекта в реестре
19.19. Определение типа файла по расширению
19.20. Создание GUID
19.21. Блокировка компьютера
19.22. Как создать COM-объект по GUID?
19.23. Почему уничтожается remoting-объект?
19.24. Ошибка SerializationException: ''BinaryFormatter Version incompatibility'' при использовании .NET Remoting
19.25. Использование Speech API

Глава 20. Регулярные выражения

20.1. Поиск совпадения
20.2. Поиск и получение совпавшего текста
20.3. Поиск с заменой
20.4. Разделение строки на слова
20.5. Разбор CSV-файла с учетом кавычек
20.6. Выделение макроимен
20.7. Изменение формата даты
20.8. Замена заголовка HTML-файла
20.9. Тестирование регулярных выражений
20.10. Примеры регулярных выражений
20.10.1. E-mail
20.10.2. Положительные десятичные числа
20.10.3. HTML-теги
20.10.4. HTML-теги с Java-привязкой
20.10.5. HTML-теги с атрибутами
20.10.6. Строки HTML-цветов
20.10.7. XML-теги (закрытые теги)
20.10.8. MAC-адрес
20.10.9. Имя макроса (формат @@имя@@)
20.10.10. Время

Глава 21. XML

21.1. Загрузка содержимого XML из файла
21.1.1. Вариант 1
21.1.2. Вариант 2
21.2. Загрузка содержимого XML из URL
21.3. Загрузка содержимого XML из строки
21.4. Обход всех элементов XML-файла
21.5. Поэлементное чтение XML-файла
21.6. Чтение атрибутов
21.7. Чтение всех атрибутов
21.8. Запись атрибутов
21.9. Запись данных в XML-файл
21.10. Запись комментариев в XML-файл
21.11. Запись пространства имен и префиксов в XML-файл
21.12. Запись в XML-файл со специальным форматированием
21.13. Выборка из XML с помощью XPath
21.14. Вычисление выражений с помощью XPath
21.15. Вычисление min и max с помощью XPath
21.16. Создание XPathDocument из строки
21.17. XSL-трансформация
21.18. XSL-трансформация с параметрами
21.19. Проверка файла с помощью XSD
21.20. В чем разница между InnerXml, OuterXml и InnerText?
21.21. В чем разница между Load и LoadXml класса XmlDocument?
21.22. Как добавить XmlNode из одного документа в другой?
21.23. Аналог простого ini-файла для хранения настроек
21.24. Работа с ini-файлами

Глава 22. Windows Forms

22.1. Сворачивание программы в трей
22.2. Как сделать форму, не видимую в панели задач?
22.3. Как скрыть главную форму при старте приложения?
22.4. Получение всех цветов в системе
22.5. Получение положения курсора мыши
22.6. Как отлавливать все исключения?
22.7. Как сделать обработчик для сообщений Win32?
22.8. Есть ли в C# аналог ProcessMessages из Delphi?
22.9. Проблемы с ImageList при использовании EnableVisualStyles
22.10. Как поменять фон MDI-окон?
22.11. Определение разрешения экрана
22.12. Определение рабочей области экрана без системного трея
22.13. Использование системного буфера обмена
22.14. Обработка изменения системных настроек (например, разрешения экрана)
22.15. Показ HTML на форме
22.16. Отображение подсказки из справочных файлов
22.17. Рисование без обработки события Paint
22.18. Как нарисовать точку?
22.19. Проверка на попадание в область
22.20. Вывод на консоль из приложения Windows Form
22.21. Использование автозавершения в текстовом поле

Глава 23. Базы данных

23.1. Что следует использовать для закрытия соединения - Close или Dispose?
23.2. Работа с файлами MS Access
23.3. Получение индекса объекта после добавления его в таблицу
23.4. Можно ли сделать GroupBy в DataSet?
23.5. Перечисление доступных SQL-серверов
23.6. Создание расширений MS SQL 2005

Глава 24. ASP.NET

24.1. Преобразование относительного пути в абсолютный
24.2. Управление буферизацией страниц
24.3. Управление кэшированием страниц
24.4. Перенаправление на другую страницу
24.5. Чем метод Server.Transfer отличается от метода Response.Redirect?
24.6. Перенаправление на другую страницу при исключении
24.7. Использование cookies
24.8. Установка фокуса на элемент управления
24.9. Просмотр исходного кода страницы
24.10. Открытие страницы по кнопке в новом окне
24.11. Обработка исключений на странице
24.12. Глобальная обработка исключений ASP.NET
24.13. Ссылка на файл для скачивания
24.14. Управление созданием обработчиков IHttpHandler
24.15. Сложная привязка данных с помощью DataBinder
24.16. Что плохого в использовании сессий?
24.17. Настройка хранения сессий
24.18. Передача между страницами значений серверного элемента управления
24.19. Как перехватить загрузку и сохранение ViewState?
24.20. Создание общей сессии между ASP- и ASP.NET-приложениями
24.21. Что такое AJAX?
24.22. Получение серверных данных без AJAX
24.23. Получение HTML-кода элемента
24.24. Печать страницы на принтер по умолчанию
24.25. Проблемы несовместимости браузеров
24.26. Быстрая генерация табличного представления Web-формы
24.27. Почему Page_Load вызывается два раза?
24.28. Получение пути к странице

Глава 25. MS Office, Internet Explorer

25.1. Получение данных со страницы MS Excel
25.2. Доступ к данным MS Excel
25.3. Работа с данными в буфере обмена в Excel-формате CSV
25.4. Как обойти проблемы с использованием объектов MS Office?
25.5. Как напечатать документ MS Office?
25.6. Формирование документов MS Excel и MS Word из ASP.NET
25.7. Работа с MS Office через DDE
25.8. Работа с календарем MS Outlook
25.9. Использование Word Spell Checker для проверки орфографии
25.10. Журнал истории Internet Explorer

Глава 26. WMI

26.1. Что такое WMI?
26.2. Работа с WMI на удаленной машине
26.3. Получение свойств видеоконтроллера и частоты обновления экрана
26.4. Получение информации о компьютере
26.5. Получение информации о производителе
26.6. Получение информации об операционной системе
26.7. Выполнение logoff, shutdown, reboot
26.8. Получение информации о рабочем столе
26.9. Определение типа компьютера
26.10. Определение физических параметров компьютера
26.11. Установка имени компьютера
26.12. Получение информации о процессорах
26.13. Получение списка общих файлов и каталогов
26.14. Создание и удаление общего каталога
26.15. Перечисление подключенных сетевых ресурсов
26.16. Получение информации о диске
26.16.1. Вариант 1
26.16.2. Вариант 2
26.17. Получение переменных окружения
26.18. Получение информации о загрузчике системы
26.19. Получение списка процессов
26.20. Получение списка запущенных и остановленных сервисов
26.21. Получение информации о разделах диска
26.22. Получение учетных записей локальной машины или домена
26.23. Получение списка групп локальной машины или домена

Глава 27. Работа с аппаратурой

27.1. Импортирование функций Setup API
27.2. Перечисление устройств
27.3. Получение состояния устройства
27.4. Программное отключение устройства
27.5. Отслеживание изменения аппаратной конфигурации
27.6. Перечисление устройств ввода с помощью функций Direct X
27.7. Чтение скан-кодов клавиатуры с помощью функций Direct X
27.8. Чтение данных с последовательного порта
27.8.1. Вариант 1
27.8.2. Вариант 2
27.8.3. Вариант 3

Глава 28. Изображения

28.1. Изменение размеров картинки
28.2. Доступ к пикселам изображения
28.3. Создание негатива изображения
28.4. Изменение цветовой матрицы изображения
28.4.1. Преобразование цветов изображения
28.4.2. Создание серого изображения
28.4.3. Создание ''затемненного'' изображения
28.5. Рисование блокированной кнопки
28.6. Создание серого оттенка цвета
28.7. Загрузка изображения из буфера обмена
28.8. Замена цвета в изображении
28.9. Преобразование значков в изображение
28.10. Создание графической экранной копии формы
28.10.1. Вариант 1
28.10.2. Вариант 2
28.11. Создание графической копии экрана
28.12. Изменение размера изображения
28.13. Создание пиктограммы
28.14. Анимированный GIF
28.15. Градиентная заливка
28.16. Исключение при установке прозрачного фона
28.17. Как нарисовать математическую формулу?

Приложение 1. Интернет-ресурсы
Приложение 2. Описание компакт-диска
Список литературы

Предметный указатель

Введение

Павел Агуров

Огромное количество классов Framework, с одной стороны, позволяет выполнять множество операций, которые в других языках программирования требовали установки дополнительных компонент (только не подумайте, что я говорю, будто бы C# хуже или лучше C++ и Delphi!). С другой стороны - это оборачивается необходимостью помнить множество классов и методов. Ничего страшного в этом нет, но мне всегда хотелось минимизировать затраты на поиск стандартных решений.

За несколько лет использования C# у меня накопилось множество небольших программок, решающих каждодневно возникающие задачи. Если мне нужно выполнить проверку XML файла или обратиться к устройству USB - я просто открываю свой сборник и копирую из него нужный кусок кода. Если нужного примера там нет, я его добавляю. Кроме того, сюда включены некоторые вопросы, которые я задаю на интервью при приеме на работу. Так накопился не очень большой, но, как мне кажется, полезный сборник небольших примеров или просто ответов на часто возникающие вопросы, который я и решился представить вашему вниманию.

Для кого эта книга

Эта книга для программистов-практиков. Не ищите в ней теоретических знаний - для этого есть множество замечательный изданий. Эта книга - набор готовых решений, советов и исходного кода.

Предполагается, что читатель знаком с синтаксисом языка C# и имеет представление об архитектуре платформы .NET.

О программном коде

Код, приведенный в книге, собирался в течение нескольких лет из различных источников. Это и книги и Интернет и вопросы интервью... По возможности, я старался указывать автора, но, конечно, это не всегда было возможно.

Каждый листинг, приведенный в книге, проверялся и, при необходимости, корректировался.

Из-за того, что книга содержит, по большей части, не полные листинги программ (в большинстве примеров удалена автоматически генерируемая и системная информация), мне пришлось пойти на некоторый компромисс. С одной стороны, использование оператора using прибавило бы читабельности кода, но с другой - необходимость каждый раз указывать, что "для работы этого фрагмента кода следует указывать следующие описания..." усложнило бы и без того не легкую жизнь. Итак, директивы using во фрагментах кода не указываются, зато имена классов указываются полностью.

Полный и компилируемый исходный код приведен на компакт-диске.

Краткое описание глав

Первая часть книги состоит из 12 глав и описывает общие вопросы платформы .NET.

Часть II посвящена файлам и файловым операциям.

Часть III (глава 15 "Сетевая информация и сетевые операции") содержит примеры работы с сетью, сетевые операции и работу с Интернет.

Часть IV содержит примеры системных операций.

Часть V (глава 20 "Регулярные выражения") посвящена регулярным выражениям. Это исключительно мощный инструмент! Об этом надо обязательно знать и пользоваться.

Часть VI (глава 21 "XML") посвящена работе с XML и всеми связанными с ним вопросами.

Часть VII (глава 22 "Windows Forms") содержит примеры программ, отвечающих на часто возникающие вопросы при разработке приложений Windows Application.

Часть VIII (глава 23 "Базы данных") отвечает на некоторые вопросы, связанные с разработкой баз данных.

Часть IX (глава 24 "ASP.NET") содержит решение вопросов, возникающих при разработке приложений ASP.NET.

Часть X (глава 25 "MS Office, Internet Explorer") показывает примеры взаимодействия с MS Office и Internet Explorer.

Часть XI (глава 26 "WMI") содержит примеры работы с WMI.

Часть XII (глава 27 "Работа с аппаратурой") показывает примеры работы с аппаратурой, в частности, с COM и USB портами.

Часть XIII (глава 28 "Изображения") показывает примеры работы с изображениями: градиентная заливка, создание скриншотов, преобразование форматов изображений и т. д.

Комментарии

Алексей Кирюшкин

Действительно, хороший FAQ по типовым операциям на C#, который удобно иметь под рукой.