Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 293

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 287 288 289 290 291 292 < 293 > 294 295 296 297 298 299 .. 404 >> Следующая


public scacic void Serialise ()

(

// Создание объекта класса Person Person me = new Pereon О j .

H Ввод данных, подлежащих сериализации me.Age “ 34:

me.WeightInPounds » 200?

// Создание на диске файла, предназначенного для хранения данного объекта... Stream в * File.Open ( 'Me.dat* , FileMode,Create ) j ¦

// использование BinaxyForsacter для записи этого объекта в поток... BinaryFonnatter bf ¦ new BinaryFonnatter {);

/1 Сериализация объекта '

bf.Serialize (a , me) t

11 и за ги потока a.Close ();

Как это работает

Во-первых, в этой программе создается объект класса Person, затем присваиваются значения Аде и weightrnPounds, после чего создается поток в виде файла Me.dat, и этот поток закрывается.

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

[Serializable] public claes Person {

public Person О {

)

шяшттктатшшттшттштшштятттл

public int WeightlnPounda/

}

В процессе сериализации такого класса будет сохраняться только член Аде, а член weightinPounds сохраняться не будет и, следовательно, ие будет извлекаться при десериализации.
626 _____________Глава 22

Десериализация, в основном, обратна коду, приведенному выше. Следующий пример открывает поток в виде файла Me.dat, создает BinaryFormatter дтя считывания объекта и вызывает метод Deserialize, позволяющий извлечь этот объект. После этого считанные данные приводятся к типу Person, и на консоль выводятся возраст и вес:

public static void DeSerialize {)

<

//на этот раз сначала открывается файл Stream а = File.Open ('Me.dat' , FileMode.Open);

// BinaryFormatted используете* для чтения объекта (объектов) из потока BinaryPormatter ЬЕ * new BinaryFonoatter () ;

// Десериализация объекта object о = b?.Deserialize (в);

. // Убеждаемся в том, что объект нужного нам типа.. .

Person р = о as Person ;

¦ if (р !" null)

Console.WriteLine ('DeSerialized Person aged; (0) weight: (1)' , p. Age > p.WeightInPounds)j

// Закрытие потока a.Close <)j

}

Обычно посредством NonSerilized (не подлежащие сериализации) помечаются данные, которые получаются в результате вычислений, поскольку они могут вычислены по мере возникновения такой необходимости. В качестве примера можно привести класс, в котором вычисляются простые числа; их вполне можно сохранять для увеличения скорости ответа прн обращении к данному классу, однако сериализация и десериализация списка простых чисел не является необходимой, поскольку они всегда могут быть вычислены в момент обращения к классу. В других случаях некоторый член может иметь отношение только к данному экземпляру документа. Например, для объекта, который представляет документ, обрабатываемый редактором, потребуется сериализовать содержимое самого документа, но не текущую позицию, поскольку при очередной загрузке документа в качестве такой позиции просто используется начало документа.

Если необходим более полный контроль за сериализацией документа, то следует реализовать интерфейс iSerializable. Это очень сложная тема, и в настоящей книге ее рассматривать не будем.

Атрибут System.Reflection.AssemblyDelaySignAitribute

В пространстве имен System.Reflection существует несколько атрибутов, уже упоминавшихся в настоящей главе. Одним нз наиболее сложных в использовании является атрибут AssemblyDelaySign, В предшествующей главе вы познакомились с тем, какнм образом создаются модули и глобальные модули, а также каким образом их можно зарегистрировать в Global Assembly Cache (GAC — кэш глобальных модулей). .NET Framework, кроме того, позволяет помечать модуль как “отсроченный", что, в основном, означает, что вы получаете возможность регистрировать его в GAC для отладочных целен без частного ключа.
Атрибуты

627

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

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

В следующем примере продемонстрировано, как можно обычный модуль пометить как "отсроченный", затем зарегистрировать его в GAC для осуществления отладки, после чего окончательно пометить добавлением частного ключа.
Предыдущая << 1 .. 287 288 289 290 291 292 < 293 > 294 295 296 297 298 299 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.