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.

инкапсуляция<br />

П р о б л <strong>е</strong> м а ЦоД уВ<strong>е</strong>ЛиЧшп<strong>е</strong>ЛьНьїМ с т <strong>е</strong> И Іо М<br />

Рассмотрим м<strong>е</strong>тод, обрабатывающий изм<strong>е</strong>н<strong>е</strong>ни<strong>е</strong> состояния эл<strong>е</strong>м<strong>е</strong>нта<br />

n u m ericU p D o w n . Он б<strong>е</strong>р<strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong> п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной N u m b e r o f P e o p l e и вызыва<strong>е</strong>т<br />

м<strong>е</strong>тод D i s p l a y D i n n e r P a r t y C o s t О . Им<strong>е</strong>нно зд<strong>е</strong>сь осущ<strong>е</strong>ствля<strong>е</strong>тся<br />

п<strong>е</strong>р<strong>е</strong>сч<strong>е</strong>т кон<strong>е</strong>чной суммы.<br />

p r i v a t e v o i d n u m e r ic U p D o w n l_ V a lu e C h a n g e d<br />

o b j e c t s e n d e r , E v e n t A r g s e ) {<br />

d i n n e r P a r t y . N u m b e r o f P e o p l e = ( i n t ) n u m e r i c U p D o w n l .V a l u e ;<br />

D i s p l a y D i n n e r P a r t y C o s t ( ) ;<br />

1 Аанный m m o d вызыва<strong>е</strong>т м<strong>е</strong>тод<br />

'<br />

CalculateCostO, но забыва<strong>е</strong>т вызвать<br />

м<strong>е</strong>тод CalculateCostofPecorationsO-<br />

Эта строка<br />

зада<strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong><br />

парам<strong>е</strong>тра<br />

l^umЬerofPeopie■<br />

Эля экз<strong>е</strong>мпляра<br />

ріппсграгіу на<br />

основ<strong>е</strong> вв<strong>е</strong>д<strong>е</strong>нных<br />

в форму данных.<br />

То <strong>е</strong>сть при изм<strong>е</strong>н<strong>е</strong>нии знач<strong>е</strong>ния в пол<strong>е</strong> N u m b e r o f P e o p l e<br />

показанный ниж<strong>е</strong> м<strong>е</strong>тод никогда н<strong>е</strong> вызыва<strong>е</strong>тся:<br />

p u b l i c v o i d C a lc u la t e C o s t O fD e c o r a tio n s ( b o o l Fancy) {<br />

i f (Fancy) {<br />

Эта п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нная сохраня<strong>е</strong>т<br />

знач<strong>е</strong>ни<strong>е</strong> получ<strong>е</strong>нно<strong>е</strong><br />

при п<strong>е</strong>рвом вызов<strong>е</strong> формы.<br />

C o s tO fD e c o r a tio n s = (Num berO fPeople * 15.00М ) + 50М;<br />

} e l s e {<br />

C o s tO fD e c o r a tio n s<br />

= (N um berO fPeople * 7 . SOM) + 30M;<br />

}<br />

Повторная установка флажка Fancy<br />

Pecorations снова запуска<strong>е</strong>т м<strong>е</strong>тод<br />

CalculateCostOf PecorationsQ, что<br />

приводит к корр<strong>е</strong>кции данных.<br />

Пр<strong>е</strong>дполагалось, что вс<strong>е</strong><br />

три варианта будут выбираться<br />

одновр<strong>е</strong>м<strong>е</strong>нно!<br />

К сожал<strong>е</strong>нию, пользоват<strong>е</strong>ли н<strong>е</strong> вс<strong>е</strong>гда используют<br />

классы так, как пр<strong>е</strong>дполагал разработчик.<br />

К счастью, в <strong>C#</strong> <strong>е</strong>сть функция, позволяющая гарантировать<br />

корр<strong>е</strong>ктную работу программы, даж<strong>е</strong><br />

когда пользоват<strong>е</strong>ль д<strong>е</strong>ла<strong>е</strong>т в<strong>е</strong>щи, о которых вы и<br />

пр<strong>е</strong>дположить н<strong>е</strong> могли. Она называ<strong>е</strong>тся инкапсуляци<strong>е</strong>й<br />

(encapsulation).<br />

...иногда этими<br />

«пользова т<strong>е</strong>ля -<br />

м и» явля<strong>е</strong>т<strong>е</strong>сь<br />

вы сами!<br />

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

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

Saved successfully!

Ooh no, something went wrong!