. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
обратный вызов<br />
Обратный Вызов<br />
События в сист<strong>е</strong>м<strong>е</strong> работают корр<strong>е</strong>ктно, <strong>е</strong>сли объ<strong>е</strong>кты Ball и Bat им<strong>е</strong>ются в <strong>е</strong>динств<strong>е</strong>нном числ<strong>е</strong>. В ситуации,<br />
когда мяч<strong>е</strong>й больш<strong>е</strong> одного, вс<strong>е</strong> они оказываются подписаны на событи<strong>е</strong> HitTheBall и при <strong>е</strong>го<br />
возникнов<strong>е</strong>нии вбрасываются в игру, что н<strong>е</strong> им<strong>е</strong><strong>е</strong>т никакого смысла. Другими словами, нам нужно связать<br />
с битой вс<strong>е</strong>го один мяч, исключив возможность привязки других мяч<strong>е</strong>й.<br />
в этом нам помож<strong>е</strong>т о б р а т н ы й в ы з о в (c a llb a c k ). Так называ<strong>е</strong>тся т<strong>е</strong>хника работы с д<strong>е</strong>л<strong>е</strong>гатами, при<br />
которой вм<strong>е</strong>сто события, доступного для подписки любым объ<strong>е</strong>ктам, использу<strong>е</strong>тся м<strong>е</strong>тод (часто конструктор),<br />
с хранящимся в закрытом пол<strong>е</strong> д<strong>е</strong>л<strong>е</strong>гатом в кач<strong>е</strong>ств<strong>е</strong> аргум<strong>е</strong>нта. Обратный вызов позволит<br />
нам гарантировать, что объ<strong>е</strong>кт Bat опов<strong>е</strong>ща<strong>е</strong>т вс<strong>е</strong>го один объ<strong>е</strong>кт Ball:<br />
О Объ<strong>е</strong>кт B a t сохраня<strong>е</strong>т пол<strong>е</strong> д<strong>е</strong>л<strong>е</strong>гата закрытым<br />
Пр<strong>е</strong>дотвратить возможность создания ц<strong>е</strong>поч<strong>е</strong>к из объ<strong>е</strong>ктов Ball помож<strong>е</strong>т закрыти<strong>е</strong> хранящ<strong>е</strong>го<br />
эту информацию поля. В этом случа<strong>е</strong> объ<strong>е</strong>кт Bat управля<strong>е</strong>т вызовом нужного м<strong>е</strong>тода<br />
объ<strong>е</strong>кта Ball.<br />
О<br />
О<br />
Конструктор объ<strong>е</strong>кта B a t<br />
Когда мяч оказыва<strong>е</strong>тся в игр<strong>е</strong>, конструктор созда<strong>е</strong>т экз<strong>е</strong>мпляр биты и п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>т указат<strong>е</strong>ль<br />
на н<strong>е</strong>го м<strong>е</strong>тоду OnBalllnPlay ( ). Это м <strong>е</strong> т о д о б р а т н о г о в ы з о в а , так как объ<strong>е</strong>кт Bat использу<strong>е</strong>т<br />
<strong>е</strong>го для вызовы объ<strong>е</strong>кта, который <strong>е</strong>го создал.<br />
Объ<strong>е</strong>кт Ball п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>т<br />
сш лку на д<strong>е</strong>л<strong>е</strong>гат сво<strong>е</strong>-<br />
_ му собств<strong>е</strong>нномц м<strong>е</strong>тоди<br />
ОпВаІІІпРІауО в конструк-<br />
1 \^ ^ тор<strong>е</strong> объ<strong>е</strong>кта Bat. Посл<strong>е</strong>дний<br />
сохраня<strong>е</strong>т данный<br />
д<strong>е</strong>л<strong>е</strong>гат в закрытом пол<strong>е</strong><br />
hitriaeBallCallback.<br />
Когдо Bat ударя<strong>е</strong>т по мячу, он использу<strong>е</strong>т м<strong>е</strong>тод обратного вызова<br />
Но пока Bat скрыва<strong>е</strong>т д<strong>е</strong>л<strong>е</strong>гат, можно быть полностью ув<strong>е</strong>р<strong>е</strong>нным в том, что ни<br />
один другой мяч в игру н<strong>е</strong> попад<strong>е</strong>т. Вот р<strong>е</strong>ш<strong>е</strong>ни<strong>е</strong> пробл<strong>е</strong>мі.]!<br />
Други<strong>е</strong> мячи н<strong>е</strong> могут<br />
подсо<strong>е</strong>диниться к эт о<br />
му д<strong>е</strong>л<strong>е</strong>гату, так как<br />
данно<strong>е</strong> пол<strong>е</strong> объ<strong>е</strong>кта<br />
Bat закрыто.<br />
-Г hitBalICalIback<br />
t<br />
Т<strong>е</strong>п<strong>е</strong>рь<br />
объ<strong>е</strong>кт<br />
Bat мож<strong>е</strong>т вызвать<br />
д<strong>е</strong>л<strong>е</strong>гат<br />
hitBallCallhackj который,<br />
в свою оч<strong>е</strong>р<strong>е</strong>дь,<br />
вызов<strong>е</strong>т м <strong>е</strong> <br />
тод OnBallInPiayQ<br />
объ<strong>е</strong>кта Ball.<br />
516 глава 11