14.02.2017 Views

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Нисходящ<strong>е</strong><strong>е</strong> и Восходящ<strong>е</strong><strong>е</strong> прив<strong>е</strong>д<strong>е</strong>ни<strong>е</strong> инт<strong>е</strong>рф<strong>е</strong>йсов<br />

Вы уж<strong>е</strong> вид<strong>е</strong>ли, что оп<strong>е</strong>раторы i s и a s работают с инт<strong>е</strong>рф<strong>е</strong>йсами. Значит, для них возможны оп<strong>е</strong>рации<br />

восходящ<strong>е</strong>го и нисходящ<strong>е</strong>го прив<strong>е</strong>д<strong>е</strong>ния. Добавим инт<strong>е</strong>рф<strong>е</strong>йс I C o o k s F o o d к любому классу который<br />

ум<strong>е</strong><strong>е</strong>т подогр<strong>е</strong>вать <strong>е</strong>ду. Добавим такж<strong>е</strong> класс M ic r o w a v e (Микроволновка). Наряду с классом O v en он<br />

буд<strong>е</strong>т р<strong>е</strong>ализовывать инт<strong>е</strong>рф<strong>е</strong>йс IC o o k s F o o d . В р<strong>е</strong>зультат<strong>е</strong> вы получит<strong>е</strong> три способа доступа к объ<strong>е</strong>кту<br />

O ven. А функция I n t e l l i S e n s e подскаж<strong>е</strong>т, каки<strong>е</strong> оп<strong>е</strong>рации вы мож<strong>е</strong>т<strong>е</strong> производить в каждом из этих<br />

тр<strong>е</strong>х случа<strong>е</strong>в:<br />

O v en m i s t e r T o a s t y = n ew O v en О<br />

m i s t e r T o a s t y .<br />

Сразу посл<strong>е</strong> ввода<br />

мочки функця<br />

IntelliSense<br />

выв<strong>е</strong>д<strong>е</strong>т список<br />

вс<strong>е</strong>я возможных<br />

чл<strong>е</strong>нов.<br />

•mCapacity<br />

ж Color<br />

: ConsumePower<br />

Equals<br />

GetHashCode<br />

GetType<br />

' HeatUp<br />

Я * Pluggedin<br />

Preheat<br />

Reheat<br />

I C o o k s F o o d c o o k e r ;<br />

i f ( m i s t e r T o a s t y i s I C o o k s F o o d )<br />

lint Oven.Capacit/<br />

misterToasty — это ссылка<br />

класса Oven, указываю-<br />

‘ ш,ая на обь<strong>е</strong>кт Oven, так<br />

что у вас <strong>е</strong>сть доступ ко<br />

вс<strong>е</strong>м свойствам ц м <strong>е</strong>т о-<br />

, дам этого класса... но это<br />

[ссылка м<strong>е</strong>н<strong>е</strong><strong>е</strong> общ<strong>е</strong>го типа,<br />

j поэтому указывать она<br />

мож<strong>е</strong>т только на объ<strong>е</strong>кты<br />

класса Oven.<br />

Capacity<br />

(interface)<br />

ICooksFood<br />

Capacity<br />

HeatUpO<br />

ReheatO<br />

_<br />

Любой класс,<br />

р<strong>е</strong>ализующий<br />

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

1Соо1аРоо1^,<br />

относится к<br />

приборам, которы<strong>е</strong><br />

могут<br />

разогр<strong>е</strong>вать<br />

ИeatUp() <strong>е</strong>ду.<br />

Microwave<br />

Capacity<br />

c o o k e r = m i s t e r T o a s t y a s I C o o k s F o o d ;<br />

c o o k e r .<br />

Equals<br />

GetHashCode<br />

GetType<br />

♦ HeatUp<br />

* Reheat<br />

ToString<br />

A p p l i a n c e p o w e r C o n su m e r ;<br />

lint ICooksFood.Capaclty<br />

i f ( m i s t e r T o a s t y i s A p p l i a n c e )<br />

p o w e r C o n su m e r = m i s t e r T o a s t y ;<br />

p o w e r C o n s u m e r .<br />

Ссылка powerConsumer<br />

принадл<strong>е</strong>жит классу<br />

АррИам<strong>е</strong>. Она да<strong>е</strong>т<br />

доступ к открытым<br />

полям, м<strong>е</strong>тодам и свойствам<br />

этого класса. Но<br />

при ж<strong>е</strong>лании вы мож<strong>е</strong>т<strong>е</strong><br />

с <strong>е</strong><strong>е</strong> помощью сослаться<br />

на обь<strong>е</strong>кт CoffeeMaker.<br />

ConsumePower<br />

Equals<br />

GetHashCode<br />

GetType<br />

^ Pluggedin<br />

"^T o S tring<br />

Ссылка cooker принадл<strong>е</strong>жит<br />

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

и указыва<strong>е</strong>т на т от ж<strong>е</strong><br />

обь<strong>е</strong>кт Oven. Она да<strong>е</strong>т<br />

доступ только к чл<strong>е</strong>нам<br />

инт<strong>е</strong>рф<strong>е</strong>йса ICooksFood, но<br />

при этом мож<strong>е</strong>т указывать<br />

на обь<strong>е</strong>кт Microwave.<br />

[icolor Appllance.Color<br />

PreheatO<br />

HeatUpQ<br />

ReheatO<br />

HeatUpO<br />

ReheatO<br />

MakePopcornO<br />

Три ссылки на<br />

один и тот ж<strong>е</strong><br />

объ<strong>е</strong>кт дают доступ<br />

к различным<br />

м<strong>е</strong>тодам и свойствам,<br />

в зависимости<br />

от сво<strong>е</strong>го<br />

типа.<br />

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

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

Saved successfully!

Ooh no, something went wrong!