. Стиллмен, Дж. Грин - Изучаем 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