14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

чт<strong>е</strong>ни<strong>е</strong> и запись файлов<br />

А трибут [Serializable]<br />

А т р и б у т о м назы ва<strong>е</strong>тся сп<strong>е</strong>циальны й т<strong>е</strong>г, добавля<strong>е</strong>м ы й в в<strong>е</strong>рхню ю часть классов. С помощ ью атрибутов<br />

в <strong>C#</strong> сохраняю тся м <strong>е</strong> т а д а н н ы <strong>е</strong> , то <strong>е</strong>сть и н ф о р м ац и я о том , как нужно исп ользовать код. Д о б а в и в атр и ­<br />

бут [ S e r i a l i z a b l e ] н а д о б ъ я в л <strong>е</strong> н и <strong>е</strong> м к л а с с а , вы п оказы ва<strong>е</strong>т<strong>е</strong>, что это т класс м ож но с<strong>е</strong>риализовать.<br />

П одобно<strong>е</strong> допустимо, скаж <strong>е</strong>м, для классов с полям и значим ы х ти п ов (напри м <strong>е</strong>р, i n t , d e c im a l или<br />

<strong>е</strong>питп). О тсутстви<strong>е</strong> этого атрибута, как и наличи<strong>е</strong> в класс<strong>е</strong> пол<strong>е</strong>й, с<strong>е</strong>риализац и я которы х н<strong>е</strong>возм ож на,<br />

п ри водят к сообщ <strong>е</strong>нию об ощ ибк<strong>е</strong>. Уб<strong>е</strong>дит<strong>е</strong>сь в этом сами...<br />

Создани<strong>е</strong> и с<strong>е</strong>риализация класса<br />

П ом н и т<strong>е</strong> класс Guy из главы 3? С <strong>е</strong>риализу<strong>е</strong>м <strong>Дж</strong>о, чтобы и н ф о р м ац и я о коли ч<strong>е</strong>ств<strong>е</strong> <strong>е</strong>го<br />

наличности осталась в ф айл<strong>е</strong>.<br />

[ S e r i a l i z a b l e ]<br />

c l a s s Guy<br />

в в<strong>е</strong>рхн<strong>е</strong>й части л ю ­<br />

бого файла класса, кот орый Вы собира<strong>е</strong>т <strong>е</strong>сь с<strong>е</strong>риализовать.<br />

Э тот код с<strong>е</strong>риализу<strong>е</strong>т класс в ф ай л G uy_f i l e . d a t, а такж <strong>е</strong> добавля<strong>е</strong>т кн опки Save Jo e<br />

(С охранить <strong>Дж</strong>о) и L oad Jo e (Загрузить Д ж о):<br />

u s in g S y ste m .lO ;<br />

u s in g S y s te m .R u n tim e . S e r i a l i z a t i o n . F o r m a t t e r s . B in a r y ;<br />

p r i v a t e v o id s a v e J o e _ C l ic k ( o b j e c t s e n d e r , E v en tA rg s e)<br />

u s in g (Stream o u tp u t = F i l e . C r e a t e ( " G u y _ F ile . d a t " )) {<br />

}<br />

B in a r y F o r m a tte r f o r m a t t e r = new B in a r y F o r m a tte r ( );<br />

f o r m a t t e r .S e r i a l i z e ( o u t p u t , j o e ) ;<br />

}<br />

p r i v a t e v o i d l o a d J o e _ C l ic k ( o b j e c t se n d e r , E ven tA rgs e)<br />

{<br />

u s in g (Stream in p u t = F ile .O p e n R e a d (" G u y _ F ile .d a t" ))<br />

B in a r y F o r m a tte r f o r m a t t e r = new B in a r y F o r m a tte r ( );<br />

j o e = ( G u y ) f o r m a t t e r .D e s e r i a l i z e ( i n p u t ) ;<br />

Эти дв<strong>е</strong> строки using<br />

обязат<strong>е</strong>льно должны<br />

быть. П<strong>е</strong>рвая указыва<strong>е</strong>т<br />

пространство им<strong>е</strong>н,<br />

в котором происходят<br />

оп<strong>е</strong>рации ввода и вывода,<br />

вторая д<strong>е</strong>ла<strong>е</strong>т<br />

допустимой проц<strong>е</strong>дуру<br />

с<strong>е</strong>риализации.<br />

Fun w ith Jo e a n d 8 o b<br />

Joe has S »<br />

B ebhasSlffl}<br />

îh e b a r* has $100<br />

(3»в$№<br />

to Jae<br />

Receive<br />

}<br />

U pdateForm O ;<br />

Joetfïes<br />

$10 to В*<br />

Bob gives<br />

$5!o Jo e<br />

О<br />

}<br />

Запуск и т<strong>е</strong>стировани<strong>е</strong> програллмы<br />

Если Д ж о в р<strong>е</strong>зультат<strong>е</strong> обм <strong>е</strong>нны х о п <strong>е</strong>р ац и и с Бобом получил<br />

2 0 0 долларов, вряд ли он захоч<strong>е</strong>т п о т<strong>е</strong>р ять их п ри вы ход<strong>е</strong> из<br />

програм м ы . Т<strong>е</strong>п<strong>е</strong>рь Д ж о м ож <strong>е</strong>т сохран и ть свои кап италы в ф айл<br />

и восстан овить их в лю бой мом<strong>е</strong>нт.<br />

load Joe<br />

дальш<strong>е</strong> ► 431

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!