|
Программирование >> Обработка исключительных ситуаций
f.CloseO; Результат работы программы: Monster Вася health = 100 ammo = 80 Monster Петя health = 120 imno = 50 Как видите, при сериализации сохраняется все дерево объектов. Обратите внимание на то, что значение поля у не было сохранено, поскольку оно было помечено как несохраняемое. ПРИМЕЧАНИЕ- Сериализация в формате SOAP выполняется аналогично с помощью класса SoapFormatter. Программист может задать собственный формат сериализации, для этого ему придется реализовать в своих классах интерфейс ISeri al i zabl e и специальный вид конструктора класса. Рекомендации по программированию Большинство программ тем или иным образом работают с внешними устройствами, в качестве которых могут выступать, например, консоль, файл на диске или сетевое соединение. Взаимодействие с внешними устройствами организуется с помощью потоков, которые поддерживаются множеством классов библиотеки .NET. Листинг 11.12. Десериапизация объекта using System; using System.10; using System.Runtime.Serialization.Formatters.Binary; namespace Consol eAppl icationi class Classl static void MainO FileStream f = new FileStream( Demo.bin , FileMode.Open ); BinaryFormatter bf = new BinaryFormatterO; Demo d = (Demo) bf.DeserializeC f ); восстановление объекта d.X. PassportO; d.Y. Passport О ; Console.WriteLineC d.a ); Console.WriteLineC d.b ); Рекомендации по программированию 271 Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен. Классы библиотеки позволяют работать с потоками в различных режимах и на различных уровнях: на уровне двоичного представления данных, байтов и текста. Двоичные и байтовые потоки хранят данные во внутреннем представлении, текстовые - в кодировке Unicode. Поток можно открыть в синхронном или асинхронном режиме для чтения, записи или добавления. Доступ к файлам может быть последовательным и произвольным. Текстовые файлы позволяют выполнять только последовательный доступ, в двоичных и байтовых потоках можно использовать оба метода. Прямой доступ в сочетании с отсутствием преобразований обеспечивает высокую скорость обмена. Методы форматированного ввода для значений арифметических типов в С# не поддерживаются. Для преобразования из символьного в числовое представление используются методы класса Convert или метод Parse. Форматированный вывод выполняется с помощью перегруженного метода ToString, результат выполнения которого передается в методы текстовых файлов. Рекомендуется всегда проверять успешность открытия существующего файла, перехватывать исключения, возникающие при преобразовании значений арифметических типов, и явным образом закрывать файл, в который выполнялась запись. Длительные операции с файлами более эффективно выполнять в асинхронном режиме. Для сохранения объектов (сериализации) используется атрибут [Serializable]. Объекты можно сохранять в одном из двух форматов: двоичном или SOAP (в виде XML-файла). Глава 12 Сборки, библиотеки, атрибуты, директивы Все наши пред1дущие приложения состояли из одного физического файла. Для больших проектов это неудобно и чаще всего невозможно, да и в других случаях бывает удобнее поместить связанные между собой типы в библиотеку и использовать их по мере необходимости. В этой главе мы рассмотрим вопросы создания и использования библиотек, способы получения и подготовки информации о типах, пространства имен и препроцессор. Эти сведения необходимы для успешной разработки реальных программ. Сборки В результате компиляции в среде .NET создается сборка - файл с расширением ехе или dll, который содержит код на промежуточном языке, метаданные типов, манифест и ресурсы (рис. 12.1). Понятие сборки было введено в главе 1 (см. с. 9), а сейчас мы рассмотрим ее составные части более подробно. Манифест Метаданные Код на языке IL Ресурсы (не обязательно) Рис. 12.1. Сборка, состоящая из одного файла
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |