Программирование >>  Обработка исключительных ситуаций 

1 ... 85 86 87 [ 88 ] 89 90 91 ... 142


foreachC Filelnfo f in files )

f.CopyToC dest + f.Name ); копирование файлов

Console.WriteLineC Скопировано +

files.Length + jpg-файлов );

catch ( Exception e )

Console.WriteLineC Error: + e.Message );

Использование классов Fi l e и Di rectory аналогично, за исключением того, что их методы являются статическими и, следовательно, не требуют создания объектов.

Сохранение объектов (сериализация)

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

К счастью, сериализация выполняется автоматически, достаточно просто пометить класс как сериализуемый с помощью атрибута [Serial izable] . Атрибуты рассматриваются в главе 12, пока же достаточно знать, что атрибуты - это дополнительные сведения о классе, которые сохраняются в его метаданнгх. Те поля, которые сохранять не требуется, помечаются атрибутом [NonSerialized] , например:

[Serializable] class Demo

public int a = l: [NonSerialized] public double y: public Monster X. Y;

Объекты можно сохранять в одном из двух форматов: двоичном или SOAP (в виде XML-файла). В первом случае следует подключить к программе пространство имен System.Runtime.Serialization.Formatters.Binary, во втором - пространство System.Runtime.Seri alizati on.Formatters.Soap.



Рассмотрим сохранение объектов в двоичном формате. Для этого используется класс BinaryFormatter, в котором определены два метода:

Serialize( поток, объект ); DeserializeC поток ):

Метод Serialize сохраняет заданный объект в заданном потоке, метод Deserialize восстанавливает объект из заданного потока.

В листинге 11.11 объект приведенного ранее класса Demo сохраняется в файле на диске с именем Demo.bin. Этот файл можно просмотреть, открыв его, к примеру, в Visual Studic.NET.

Листинг 11.11. Сериализация объекта

using System: using System.10;

us i ng System.Runti me.Seri a 1 i zat i on.Formatters.Bi na ry;

namespace ConsoleApplicationi

[Serializable]

abstract class Spirit {

public abstract void PassportO;

[Serializable]

class Monster : Spirit

public Monster( int health, int ammo, string name )

this.health = health; this.ammo - ammo; this.name = name:

override public void PassportO

Console.WriteLineC Monster {0} \t health = {1} anmio = {2} , name, health, ammo );

string name;

int health, ammo;

[Serial izable] class Demo

public int a = 1;



Сохранение объектов (сериализация)

[NonSerialized] public double b; public Monster X, Y;

class Classl

{ static void MainO

d = DemoO; d.X = new Monster( 100. 80. Вася ); d.Y = new MonsterC 120, 50, Петя );

d.a - 2; d.b = 2;

d.X. PassportO; d. Y. PassportO;

Console.WriteLineC d.a ); Console.WriteLineC d.b );

FileStream f = new FileStreamC Demo.bin , FileMode.Create ); BinaryFormatter bf = new BinaryFormatterO;

bf.Serialize( f, d );

сохранение объекта d в потоке f

f.CloseO:

В программе не приведены неиспользуемые методы и свойства классов. Обратите внимание на то, что базовые классы сохраняемых объектов также должны быть помечены как сохраняемые. Результат работы программы:

Monster Вася Monster Петя 2 2

health = 100 amu = 80 health = 120 aimo = 50

Итак, для сохранения объекта в двоичном формате необходимо:

1. Подключить к программе пространство имен System.Runtime.Serialization. Formatters.Binary.

2. Пометить сохраняемый класс и связанные с ним классы атрибутом [Serializable].

3. Создать поток и связать его с файлом на диске или с областью оперативной памяти.

4 . Создать объект класса BinaryFormatter.

5. Сохранить объекты в потоке.

6. Закрыть файл.

В листинге 11.12 сохраненный объект считывается из файла.



1 ... 85 86 87 [ 88 ] 89 90 91 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика