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.

1$ показыва<strong>е</strong>т Вам, что им<strong>е</strong>нно объ<strong>е</strong>кт р<strong>е</strong>ализу<strong>е</strong>т<br />

а$ показыва<strong>е</strong>т компилятору, как обработать этот объ<strong>е</strong>кт<br />

Иногда тр<strong>е</strong>бу<strong>е</strong>тся вызвать м<strong>е</strong>тод, получ<strong>е</strong>нный объ<strong>е</strong>ктом в проц<strong>е</strong>сс<strong>е</strong> р<strong>е</strong>ализации<br />

инт<strong>е</strong>рф<strong>е</strong>йса. Но что д<strong>е</strong>лать, <strong>е</strong>сли вы н<strong>е</strong> зна<strong>е</strong>т<strong>е</strong>, нужному ли типу принадл<strong>е</strong>жит<br />

объ<strong>е</strong>кт? На помощь вам прид<strong>е</strong>т оп<strong>е</strong>ратор 1б. А оп<strong>е</strong>ратор аз позволит пр<strong>е</strong>образовать<br />

один совм<strong>е</strong>стимый ссылочный тип в другой.<br />

инт<strong>е</strong>рф<strong>е</strong>йсы и абстрактны<strong>е</strong> классы<br />

IWorker[] bees = new IWorker[3];<br />

beesEO] = new NectarStinger{)<br />

bees [1] = new RoboBeeO;<br />

bees [2] = new Worker 0;<br />

Mw п<strong>е</strong>р<strong>е</strong>бира<strong>е</strong>м пч<strong>е</strong>л.--<br />

for (int i = 0; i < bees.Length; i++) {<br />

C ^ i f<br />

- .Mпров<strong>е</strong>ря<strong>е</strong>м,<br />

р<strong>е</strong>ализу<strong>е</strong>т<br />

ли пч<strong>е</strong>ла<br />

инт<strong>е</strong>рф<strong>е</strong>йс<br />

INectarCollector.<br />

Возьми в руку карандаш<br />

(bees[i] is INectarCollector)<br />

INectarCollector thisCollector;<br />

thisCollector = bees [i]<br />

thisCollector.GatherNectarо ;<br />

f<br />

* * ' Т<strong>е</strong>п<strong>е</strong>рь можно вызывать м<strong>е</strong>тоды<br />

инт<strong>е</strong>рф<strong>е</strong>йса INectarCollector.<br />

{<br />

Cor.<br />

Мы н<strong>е</strong> мож<strong>е</strong>м вызывать<br />

для пч<strong>е</strong>л м <strong>е</strong>­<br />

тоды инт<strong>е</strong>рф<strong>е</strong>йса<br />

INectarCollector- В<strong>е</strong>дь<br />

пч<strong>е</strong>лы принадл<strong>е</strong>жат<br />

типу M arker и нич<strong>е</strong>го<br />

н<strong>е</strong> знают о м<strong>е</strong>тодах<br />

INectarCollector.<br />

INectarCollector;<br />

Для каждого из показанных справа оп<strong>е</strong>раторов напишит<strong>е</strong>, при каком знач<strong>е</strong>нии сч<strong>е</strong>тчика<br />

пч<strong>е</strong>л i он буд<strong>е</strong>т им<strong>е</strong>ть знач<strong>е</strong>ни<strong>е</strong> tr u e . Зач<strong>е</strong>ркнит<strong>е</strong> сл<strong>е</strong>ва дв<strong>е</strong> строчки, которы<strong>е</strong><br />

н<strong>е</strong> компилируются.<br />

Г-, „ -гг. 1 Г01<br />

i w o r k e r [] B e es = new i w o r k e r [8 ];<br />

1. ( B e e s [ i ] i s I N e c t a r C o l l e c t o r )<br />

B e es [0] = new N e c t a r S t i n g e r 0 ;<br />

B e e s [ l] = new R o b o B eeO ; ................................................................................................<br />

B e e s [2] = new W orker 0 ;<br />

B e e s [3 ] = B e e s [0 ]<br />

B e e s [4] = i s t i n g P a t r o l ;<br />

B e es [5] = n u l l ;<br />

B e es [6] = B e es [0] ;<br />

a s IW orker;<br />

B e es [7] = new I N e c t a r C o l l e c t o r {) ;<br />

2 . (Bees[i] is istingPatrol)<br />

3. ( B e e s [ i ] i s IW o r k e r )<br />

дальш<strong>е</strong> > 297

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

Saved successfully!

Ooh no, something went wrong!