Информация о книге

5-94157-969-1,978-5-94157-969-3

Главная  » Тематика определяется » C#. Сборник рецептов (+CD-ROM)

Агуров П.В., C#. Сборник рецептов (+CD-ROM)


серия: Профессиональное программирование
БХВ-Петербург, 2007 г., 432 стр., 5-94157-969-1,978-5-94157-969-3


Наличие в интернет-магазинах

Магазинов: 1, Цена: от 419 руб. посмотреть все

Описание книги

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

Купить эту книгу можно в интернет-магазинах

  Лабиринт - 419 руб.
  Страница товара выбранного интернет-магазина откроется в новом табе

Скачать, но не бесплатно эту книгу можно в интернет-магазинах

  Литрес - 167 руб.

Читать онлайн


Доступен для чтения фрагмент книги

Ключевые слова

Поделиться ссылкой на книгу



Содержание книги

Введение 1
Для кого эта книга 1
О программном коде 1
Краткое описание глав 2
Благодарности 3
Обратная связь 4
Глава 1. Технология .NET 5
1.1. На каких платформах запускается .NET? 5
1.2. Какие компиляторы существуют для .NET? 5
1.3. Можно ли запустить программу без .NET
Framework? 5
1.4. Можно ли вызывать функции Win32 из
.NET-программ? 6
1.5. Проблемы установки Framework 6
1.6. Ускорение загрузки модулей 7
1.7. Одновременная установка Visual Studio 2003 и
2005 7
1.8. Не запускается отладчик в Visual Studio 8
1.8.1. Ошибка безопасности 8
1.8.2. Ошибка конфигурирования 8
1.8.3. Ошибка 401 9
1.9. Не запускается отладчик в Visual Studio 2005 9
Глава 2. Вопросы синтаксиса C# 11
2.1. Как выглядит простая C#-программа? 11
2.2. Оператор switch можно использовать для строк
11
2.3. Выходные параметры без инициализации 12
2.4. Константы и поля "только для чтения" 13
2.5. Как определить ссылочный тип? 14
2.6. Псевдонимы 15
2.7. Что означает символ @ в начале строки? 15
2.8. Что означает символ @ перед
идентификатором? 15
2.9. Какая разница между оператором is и методом
IsSubclassOf? 16
2.10. Какая разница между оператором as и прямым
приведением типа? 16
2.11. Какая разница между string и System.String?
16
2.12. Какая разница между override и new? 17
2.13. Какая разница между == и Equals? 18
2.14. Перекрытие операторов 19
2.15. Как создать наследника, если конструктор
класса имеет параметры? 22
2.16. Что такое делегат? 23
2.17. В чем разница между полем и свойством? 24
2.18. Свойство с индексатором 25
2.19. Можно ли сделать свойство с разным уровнем
доступа для get и set? 26
2.20. Как вызвать методы с одинаковыми именами
из интерфейсов? 27
2.21. В чем разница byte и sbyte? 28
2.22. Как сгенерировать документацию по коду?
28
2.23. Как инициализировать поля класса до вызова
конструктора? 29
2.24. Использование переменного числа
параметров 29
2.25. Указатели 30
2.26. Слабые ссылки 32
2.27. Файлы ресурсов 33
Глава 3. Для программистов C++ и Delphi 35
3.1. Как удалить объекты, созданные с помощью
оператора new? 35
3.2. Как создать экземпляр класса на стеке? 35
3.3. Почему не вызывается деструктор? 35
3.4. Почему в операторе if больше нельзя
использовать условия типа int? 35
3.5. Как создать массив констант? 36
3.6. Как инициализировать массив структур? 36
3.7. Оператор switch работает не так, как в C++ 37
3.8. Есть ли в C# макросы и препроцессор? 38
3.9. Как описать битовые поля? 38
Глава 4. Отражение и связанные с ним вопросы 41
4.1. Создание объекта по имени типа 41
4.2. Вызов метода по имени 43
4.3. Загрузка и создание класса из другой сборки
44
4.4. Получение списка типов из сборки 44
4.5. Получение всех свойств класса 45
4.6. Установка значения private-поля 45
4.7. Получение списка полей структуры 47
4.8. Получение полного имени сборки и ее свойств
48
4.9. Компиляция кода из программы 49
4.10. Перехват загрузки типов и модулей 50
Глава 5. Отладка и условная компиляция 53
5.1. Условная компиляция в режиме отладки 53
5.2. Методы ASSERT и TRACE 53
5.3. Перенаправление вывода Trace 54
5.4. Почему дублируются строки в отладочной
информации? 55
5.5. Трассировка исключения 55
5.6. Трассировка стека вызовов 56
5.7. Оценка времени выполнения кода 58
5.7.1. Измерение с помощью TickCount (наименьшая
точность) 58
5.7.2. Измерение с помощью Ticks (средняя
точность) 59
5.7.3. Измерение с помощью QueryPerformance
(высокая точность) 59
5.8. Как включить полный режим отладки кода? 59
5.9. Отладочная информация для ASP.NET 60
5.10. Как отлаживать remoting-код? 60
5.11. Глобальная обработка исключений 60
Глава 6. Командная строка, свойства программы,
конфигурационные файлы 63
6.1. Параметры командной строки 63
6.2. Имя исполняемого файла 64
6.3. Установка свойства CompanyName 64
6.4. Конфигурационный файл 64
6.5. Где найти класс ConfigurationManager? 65
6.6. Нестандартный конфигурационный файл 65
6.7. Как заставить программу использовать только
Framework 2.0? 71
6.8. Версия и информация о модуле 72
6.9. Как обновлять AssemblyInfo для всего проекта
сразу? 72
Глава 7. Преобразования 73
7.1. Преобразование числа в шестнадцатеричную
строку 73
7.2. Преобразование строки в число 73
7.3. Преобразование строки с пробелами в число 74
7.4. Преобразование шестнадцатеричной строки в
число 74
7.5. Преобразование двоичной строки в число 74
7.6. Преобразование числа в двоичную строку 74
7.7. Преобразование числа с плавающей точкой в
строку 74
7.8. Преобразование строки в число с плавающей
точкой 75
7.9. Перекодировка текста 77
7.10. Преобразование в Base64 и обратно 77
7.11. Преобразование из Win1251 в KOI8 и обратно
77
7.12. Преобразование цвета в строку и обратно 78
7.13. Преобразование цвета в HTML-формат 78
7.14. Преобразование цвета в целое число и
обратно 79
7.15. Преобразование HTML-текста 79
7.16. Преобразование массива байтов в базовые
типы и обратно 80
Глава 8. Массивы, списки, таблицы, перечисления
81
8.1. Отображение всех элементов перечисления 81
8.2. Перевод перечисления в строковый вид и
обратно 81
8.3. Проверка наличия элемента в перечислении 82
8.4. Одномерные массивы постоянного размера 82
8.4.1. Изменение размерности массива 83
8.4.2. Перебор всех элементов массива 83
8.4.3. Изменение порядка элементов на обратный
84
8.4.4. Поиск 84
8.4.5. Копирование элементов массива 85
8.4.6. Преобразование массива одного типа в
массив другого типа 85
8.5. Многомерные массивы постоянного размера 85
8.6. Невыровненный массив 86
8.7. Свойства массивов 86
8.8. Методы, возвращающие массивы 87
8.9. Массивы переменного размера 88
8.10. Массив битов 88
8.11. Хранение таблицы "ключ/значение" 89
8.11.1. Добавление элементов 90
8.11.2. Отображение содержимого Hashtable 90
8.11.3. Порядок элементов Hashtable 90
8.11.4. Удаление элемента из Hashtable 91
8.11.5. Специальный Hashtable 91
8.12. Сортированный список 92
8.13. Очередь 94
8.14. Стек 94
8.15. Преобразование IList в ArrayList 95
Глава 9. Шифрование, кодирование, сжатие,
математика 97
9.1. Вычисление контрольной суммы строки 97
9.2. Шифрование строк 98
9.3. Контроль арифметических операций 103
9.4. Вычисление математических выражений 104
Глава 10. Строковые и символьные операции 105
10.1. Проверка символов 105
10.2. Создание строки одинаковых символов 105
10.3. Проверка, является ли строка числом 106
10.4. Проверка, является ли строка допустимой
датой 106
10.5. Разбиение строки по разделителям 106
10.6. Объединение строк через разделитель 107
10.7. Какие преимущества дает класс StringBuilder?
107
10.8. Как сравнить все строки без учета регистра
символов? 108
10.9. Прямая модификация содержимого строки 108
10.10. Специальные символы в строке 108
Глава 11. Консольные программы 111
11.1. Вывод цветного текста 111
11.2. Задержка закрытия консольной программы
114
11.3. Перенаправление вывода консольной
программы 114
11.4. Изменение заголовка консольной программы
115
11.5. Получение размера окна консольной
программы 116
Глава 12. Производительность 117
12.1. Не кэшируйте соединение с БД 117
12.2. Используйте StringBuilder 117
12.3. Используйте Length для проверки пустоты
строки 118
12.4. Не используйте исключения, если это
возможно 119
12.5. Используйте AddRange для добавления групп
элементов 119
12.6. Создавайте Hashtable и ArrayList
подходящего размера 119
12.7. Иногда выгоднее использовать
невыровненный массив 120
12.8. Используйте DataReader для
последовательного доступа к данным 120
12.9. Используйте хранимые процедуры 120
Глава 13. Списки файлов, каталогов 121
13.1. Получение списка логических дисков 121
13.2. Получение списка сетевых дисков 122
13.3. Список каталогов 122
13.4. Список каталогов по маске 123
13.5. Список файлов 123
13.6. Список файлов по маске 124
13.7. Создание временного файла 124
Глава 14. Файловые операции 125
14.1. Блокирование ошибки "Устройство не готово"
125
14.2. Получение списка файлов и каталогов 126
14.3. Диалог открытия папки 127
14.4. Основные операции с каталогами 127
14.5. Основные операции с файлами 128
14.6. Чтение и установка атрибутов файла 128
14.7. Создание и чтение бинарного файла 128
14.8. Создание текстового файла 129
14.9. Добавление в текстовый файл 130
14.10. Чтение и запись в файл строк на русском
языке 130
14.11. Посимвольное чтение текстового файла 130
14.12. Построчное чтение текстового файла 131
14.13. Чтение файла полностью 131
14.14. Отслеживание изменений в файловой
системе 132
14.15. Получение короткого имени файла из
длинного и наоборот 133
Глава 15. Сетевая информация и сетевые операции
135
15.1. Разбор URL на составляющие 135
15.2. Получение DNS-имени компьютера 136
15.3. Получение NetBios-имени компьютера 136
15.4. Получение имени хоста 136
15.5. Получение списка IP-адресов компьютера 136
15.6. Перечисление RAS-соединений 137
15.7. Отправка письма через SMTP 140
15.7.1. Отправка письма через SMTP с
авторизацией 141
15.7.2. Отправка письма через Pickup-каталог 142
15.7.3. Задание кодировки сообщения 142
15.7.4. Отправка письма без использования
System.Web.Mail 142
15.8. Получение списка сетевых дисков 146
15.9. Получение имени текущего пользователя 147
15.10. Программная имперсонация 147
15.11. Как получить список групп домена, в
которые входит пользователь? 149
15.12. Получение файла из Интернета 150
15.13. Получение данных из Интернета 151
15.14. Получение Web-страницы 151
15.15. Использование прокси-сервера 152
15.16. Подключен ли компьютер к Интернету? 152
15.17. Как проверить, доступен ли компьютер в
сети? 153
15.18. Как сделать ping? 155
15.19. Получение файла с FTP через
WinInet-функции 156
15.20. Перечисление компьютеров в сети 159
Глава 16. Рабочий стол и панель управления 163
16.1. Что такое IWshRuntimeLibrary и Shell32? 163
16.2. Создание ярлыка 164
16.3. Как найти путь к папке автозапуска? 165
16.4. Регистрация меню запуска программы по
расширению 165
16.5. Доступ к элементам панели управления 167
16.6. Как получить разрешение экрана? 168
Глава 17. Потоки 169
17.1. Запуск и остановка потоков 169
17.2. Отмена остановки потока 174
17.3. Изолирование данных потока 174
17.4. Права потоков 177
17.5. Идентификаторы потоков 178
17.6. Пул потоков 178
17.7. Синхронизация потоков 179
17.8. Синхронизация потоков: "один пишет, многие
читают" 180
17.9. Использование AutoResetEvent 180
Глава 18. Процессы 183
18.1. Запуск внешних программ 183
18.2. Блокировка запуска второй копии программы
184
18.2.1. Вариант 1 184
18.2.2. Вариант 2 185
18.3. Информация о процессах 186
18.4. Определение всех процессов, использующих
.NET 188
18.5. Перечисление всех оконных процессов 189
18.6. Запуск внешнего процесса и вывод
результата на консоль (Windows NT) 189
18.7. Получение списка модулей, связанных с
текущим процессом 191
18.8. Управление сервисами 192
Глава 19. Разное 195
19.1. Перечисление всех принтеров системы 195
19.2. Установка принтера по умолчанию 196
19.3. Определение версии операционной системы
196
19.4. Получение текущей даты и времени 197
19.5. Установка значения десятичного
разделителя 197
19.6. Определение числа процессоров 198
19.7. Запись в системный журнал событий 198
19.8. Создание своего журнала событий 198
19.9. Как "отвязать" программу от журнала
событий 200
19.10. Перечисление доступных журналов событий
201
19.11. Звуковой сигнал 202
19.12. Генерация случайного числа 202
19.13. Принудительная сборка мусора 203
19.14. Получение пути к папке Framework 203
19.15. Проигрывание WAV-файла 204
19.16. Чтение реестра 205
19.17. Разрешение обращения к реестру 206
19.18. Сохранение объекта в реестре 206
19.19. Определение типа файла по расширению
208
19.20. Создание GUID 209
19.21. Блокировка компьютера 210
19.22. Как создать COM-объект по GUID? 211
19.23. Почему уничтожается remoting-объект? 211
19.24. Ошибка SerializationException:
"BinaryFormatter Version incompatibility" при
использовании .NET Remoting 211
19.25. Использование Speech API 212
Глава 20. Регулярные выражения 217
20.1. Поиск совпадения 217
20.2. Поиск и получение совпавшего текста 218
20.3. Поиск с заменой 219
20.4. Разделение строки на слова 219
20.5. Разбор CSV-файла с учетом кавычек 220
20.6. Выделение макроимен 221
20.7. Изменение формата даты 222
20.8. Замена заголовка HTML-файла 222
20.9. Тестирование регулярных выражений 222
20.10. Примеры регулярных выражений 223
20.10.1. E-mail 223
20.10.2. Положительные десятичные числа 223
20.10.3. HTML-теги 223
20.10.4. HTML-теги с Java-привязкой 223
20.10.5. HTML-теги с атрибутами 224
20.10.6. Строки HTML-цветов 224
20.10.7. XML-теги (закрытые теги) 224
20.10.8. MAC-адрес 224
20.10.9. Имя макроса (формат @@имя@@) 225
20.10.10. Время 225
Глава 21. XML 227
21.1. Загрузка содержимого XML из файла 227
21.1.1. Вариант 1 227
21.1.2. Вариант 2 228
21.2. Загрузка содержимого XML из URL 228
21.3. Загрузка содержимого XML из строки 229
21.4. Обход всех элементов XML-файла 229
21.5. Поэлементное чтение XML-файла 230
21.6. Чтение атрибутов 231
21.7. Чтение всех атрибутов 231
21.8. Запись атрибутов 232
21.9. Запись данных в XML-файл 232
21.10. Запись комментариев в XML-файл 233
21.11. Запись пространства имен и префиксов в
XML-файл 233
21.12. Запись в XML-файл со специальным
форматированием 233
21.13. Выборка из XML с помощью XPath 234
21.14. Вычисление выражений с помощью XPath 235
21.15. Вычисление min и max с помощью XPath 235
21.16. Создание XPathDocument из строки 236
21.17. XSL-трансформация 236
21.18. XSL-трансформация с параметрами 237
21.19. Проверка файла с помощью XSD 238
21.20. В чем разница между InnerXml, OuterXml и
InnerText? 240
21.21. В чем разница между Load и LoadXml класса
XmlDocument? 241
21.22. Как добавить XmlNode из одного документа
в другой? 241
21.23. Аналог простого ini-файла для хранения
настроек 241
21.24. Работа с ini-файлами 242
Глава 22. Windows Forms 243
22.1. Сворачивание программы в трей 243
22.2. Как сделать форму, не видимую в панели
задач? 244
22.3. Как скрыть главную форму при старте
приложения? 244
22.4. Получение всех цветов в системе 244
22.5. Получение положения курсора мыши 245
22.6. Как отлавливать все исключения? 245
22.7. Как сделать обработчик для сообщений
Win32? 246
22.8. Есть ли в C# аналог ProcessMessages из
Delphi? 247
22.9. Проблемы с ImageList при использовании
EnableVisualStyles 247
22.10. Как поменять фон MDI-окон? 248
22.11. Определение разрешения экрана 248
22.12. Определение рабочей области экрана без
системного трея 248
22.13. Использование системного буфера обмена
248
22.14. Обработка изменения системных настроек
(например, разрешения экрана) 249
22.15. Показ HTML на форме 250
22.16. Отображение подсказки из справочных
файлов 250
22.17. Рисование без обработки события Paint 251
22.18. Как нарисовать точку? 251
22.19. Проверка на попадание в область 251
22.20. Вывод на консоль из приложения Windows
Form 252
22.21. Использование автозавершения в текстовом
поле 255
Глава 23. Базы данных 259
23.1. Что следует использовать для закрытия
соединения — Close или Dispose? 259
23.2. Работа с файлами MS Access 259
23.3. Получение индекса объекта после
добавления его в таблицу 260
23.4. Можно ли сделать GroupBy в DataSet? 261
23.5. Перечисление доступных SQL-серверов 261
23.6. Создание расширений MS SQL 2005 264
Глава 24. ASP.NET 267
24.1. Преобразование относительного пути в
абсолютный 267
24.2. Управление буферизацией страниц 267
24.3. Управление кэшированием страниц 267
24.4. Перенаправление на другую страницу 268
24.5. Чем метод Server.Transfer отличается от
метода Response.Redirect? 268
24.6. Перенаправление на другую страницу при
исключении 269
24.7. Использование cookies 269
24.8. Установка фокуса на элемент управления 270
24.9. Просмотр исходного кода страницы 271
24.10. Открытие страницы по кнопке в новом окне
271
24.11. Обработка исключений на странице 271
24.12. Глобальная обработка исключений ASP.NET
272
24.13. Ссылка на файл для скачивания 274
24.14. Управление созданием обработчиков
IHttpHandler 275
24.15. Сложная привязка данных с помощью
DataBinder 276
24.16. Что плохого в использовании сессий? 277
24.17. Настройка хранения сессий 277
24.18. Передача между страницами значений
серверного элемента управления 278
24.19. Как перехватить загрузку и сохранение
ViewState? 280
24.20. Создание общей сессии между ASP- и
ASP.NET-приложениями 280
24.21. Что такое AJAX? 280
24.22. Получение серверных данных без AJAX 287
24.23. Получение HTML-кода элемента 290
24.24. Печать страницы на принтер по умолчанию
291
24.25. Проблемы несовместимости браузеров 292
24.26. Быстрая генерация табличного
представления Web-формы 292
24.27. Почему Page_Load вызывается два раза? 293
24.28. Получение пути к странице 293
Глава 25. MS Office, Internet Explorer 295
25.1. Получение данных со страницы MS Excel 295
25.2. Доступ к данным MS Excel 296
25.3. Работа с данными в буфере обмена в
Excel-формате CSV 299
25.4. Как обойти проблемы с использованием
объектов MS Office? 299
25.5. Как напечатать документ MS Office? 300
25.6. Формирование документов MS Excel и MS Word
из ASP.NET 300
25.7. Работа с MS Office через DDE 302
25.8. Работа с календарем MS Outlook 302
25.9. Использование Word Spell Checker для
проверки орфографии 303
25.10. Журнал истории Internet Explorer 308
Глава 26. WMI 311
26.1. Что такое WMI? 311
26.2. Работа с WMI на удаленной машине 311
26.3. Получение свойств видеоконтроллера и
частоты обновления экрана 312
26.4. Получение информации о компьютере 313
26.5. Получение информации о производителе 314
26.6. Получение информации об операционной
системе 315
26.7. Выполнение logoff, shutdown, reboot 320
26.8. Получение информации о рабочем столе 321
26.9. Определение типа компьютера 323
26.10. Определение физических параметров
компьютера 324
26.11. Установка имени компьютера 328
26.12. Получение информации о процессорах 328
26.13. Получение списка общих файлов и
каталогов 334
26.14. Создание и удаление общего каталога 335
26.15. Перечисление подключенных сетевых
ресурсов 336
26.16. Получение информации о диске 337
26.16.1. Вариант 1 337
26.16.2. Вариант 2 338
26.17. Получение переменных окружения 338
26.18. Получение информации о загрузчике
системы 339
26.19. Получение списка процессов 340
26.20. Получение списка запущенных и
остановленных сервисов 341
26.21. Получение информации о разделах диска
342
26.22. Получение учетных записей локальной
машины или домена 344
26.23. Получение списка групп локальной машины
или домена 345
Глава 27. Работа с аппаратурой 349
27.1. Импортирование функций Setup API 349
27.2. Перечисление устройств 352
27.3. Получение состояния устройства 355
27.4. Программное отключение устройства 358
27.5. Отслеживание изменения аппаратной
конфигурации 360
27.6. Перечисление устройств ввода с помощью
функций Direct X 361
27.7. Чтение скан-кодов клавиатуры с помощью
функций Direct X 362
27.8. Чтение данных с последовательного порта
363
27.8.1. Вариант 1 363
27.8.2. Вариант 2 366
27.8.3. Вариант 3 371
Глава 28. Изображения 373
28.1. Изменение размеров картинки 373
28.2. Доступ к пикселам изображения 374
28.3. Создание негатива изображения 374
28.4. Изменение цветовой матрицы изображения
375
28.4.1. Преобразование цветов изображения 375
28.4.2. Создание серого изображения 376
28.4.3. Создание "затемненного" изображения 377
28.5. Рисование блокированной кнопки 377
28.6. Создание серого оттенка цвета 377
28.7. Загрузка изображения из буфера обмена 378
28.8. Замена цвета в изображении 379
28.9. Преобразование значков в изображение 380
28.10. Создание графической экранной копии
формы 380
28.10.1. Вариант 1 380
28.10.2. Вариант 2 381
28.11. Создание графической копии экрана 382
28.12. Изменение размера изображения 383
28.13. Создание пиктограммы 384
28.14. Анимированный GIF 385
28.15. Градиентная заливка 386
28.16. Исключение при установке прозрачного
фона 386
28.17. Как нарисовать математическую формулу?
387
Приложение 1. Интернет-ресурсы 389
Приложение 2. Описание компакт-диска 391
Список литературы 401
Предметный указатель 403


Об авторе


Последние поступления в рубрике "Тематика определяется"



Коллекционное холодное оружие Западной Европы XVII - начала XIX вв. 

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

Терапевтическая катастрофа. Мастера психотерапии рассказывают о самых провальных случаях 

Ни один психотерапевт не застрахован от ошибок в работе с клиентами, но мало кто готов открыто обсуждать собственные неудачи. Авторы книги решили наглядно показать, что просчеты и промахи - это не только неотъемлемая сторона профессии, но и повод вынести для себя ценные уроки....

Любовь к человеку с пограничным расстройством личности 

Люди с пограничным расстройством личности (ПРЛ) могут быть очень заботливыми, нежными, умными и веселыми - и при этом своим поведением отталкивать даже самых близких людей. Если у вас непростые отношения с человеком, который страдает от ПРЛ, то эта книга - для вас....

Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Агуров П.В., C#. Сборник рецептов (+CD-ROM) в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.