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> могу получить<br />

экз<strong>е</strong>мпляры? Зач<strong>е</strong>м он вообщ<strong>е</strong> нуж<strong>е</strong>н?<br />

c l a s s Plan0 tMission {<br />

}<br />

Класс PlanetMission клуб<br />

аст рофизиков использу<strong>е</strong>т<br />

для отправки рак<strong>е</strong>т —<br />

к различным план<strong>е</strong>т ам. \<br />

p u b l i c lo n g R o c k e tF u e lP e r M ile ;<br />

p u b l i c lo n g RocketSpeedM PH;<br />

p u b l i c i n t M ile s T o P la n e t ;<br />

p u b l i c lo n g U n its O fF u e lN e e d e d () {<br />

}<br />

Иногда источником части кода являю тся производны <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>рархии обычно задаются в производных<br />

классах. В класс<strong>е</strong> Animal могут находится вычисл<strong>е</strong>ния, зависящи<strong>е</strong> от знач<strong>е</strong>ния<br />

логич<strong>е</strong>ской п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной HasTail или Vertebrate, но в н<strong>е</strong>м н<strong>е</strong>возможно<br />

задать эту п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нную.<br />

Вот <strong>е</strong>щ<strong>е</strong> один прим<strong>е</strong>р...<br />

J<br />

Присваивать этим<br />

полям знач<strong>е</strong>ния в<br />

базовом класс<strong>е</strong> б<strong>е</strong>ссмысл<strong>е</strong>нно,<br />

потому<br />

что мы н<strong>е</strong> зна<strong>е</strong>м,<br />

какая рак<strong>е</strong>та куда<br />

пол<strong>е</strong>тит.<br />

r e t u r n M ile s T o P la n e t * R o c k e tF u e lP e r M ile ;<br />

p u b l i c i n t T im eN eededO {<br />

}<br />

r e t u r n M ile s T o P la n e t / ( i n t ) RocketSpeedM PH;<br />

p u b l i c s t r i n g F u e lN e e d e d 0 (<br />

}<br />

r e t u r n " Y o u 'll n e e d "<br />

+ M ile s T o P la n e t * R o c k e tF u e lP e r M ile<br />

+ " u n i t s o f f u e l t o g e t t h e r e . I t ' l l ta k e<br />

+ T im eN eed ed () + " h o u r s ." ;<br />

Один пол<strong>е</strong>т сов<strong>е</strong>рша<strong>е</strong>мся на<br />

В<strong>е</strong>н<strong>е</strong>ру, другой-на Марс.<br />

\<br />

c l a s s Venus : P la n e t M is s io n {<br />

}<br />

p u b l i c V enus О {<br />

}<br />

M ile s T o P la n e t = 4 0 0 0 0 0 0 0 ;<br />

R o c k e tF u e lP e r M ile = 100000;<br />

RocketSpeedMPH = 25000;<br />

c l a s s Mars : P la n e t M is s io n {<br />

p u b l i c Mars 0 {<br />

M ile s T o P la n e t = 7500 0 0 0 0 ;<br />

R o c k e tF u e lP e r M ile = 1 00000;<br />

RocketSpeedMPH = 25000;<br />

}<br />

} Конструкторы производных классов^Мап<br />

и Venus задают знач<strong>е</strong>ния тр<strong>е</strong>х пол<strong>е</strong>й, унасл<strong>е</strong>дованных<br />

от класса Planet. Но поля н<strong>е</strong><br />

могут получить знач<strong>е</strong>ния от экз<strong>е</strong>мпляра<br />

Planet. Что произойд<strong>е</strong>т, <strong>е</strong>сли их ‘допыта<strong>е</strong>тся<br />

использовать м<strong>е</strong>тод FuelNeeaed{).<br />

p r i v a t e v o id b u t t o n l _ C l i c k ( o b j e c t s .<br />

Mars mars = new M a rs( );<br />

M essa g eB o x . S h ow (m ars. F u e lN e e d e d ())<br />

}<br />

E ven tA rgs e) {<br />

p r i v a t e v o id b u t t o n 2 _ C lic k ( o b j e c t s ,<br />

V enus v e n u s = new V e n u s() ;<br />

E ven tA rgs e) {<br />

M essageB ox. Show (v en u s . F u elN eed ed ( ) ) ;<br />

}<br />

p r i v a t e v o id b u t t o n 3 _ C lic k ( o b j e c t s , E v en tA rg s e) {<br />

P la n e t M is s io n p l a n e t = new P la n e t M i s s i o n ( );<br />

M essageB ox. Show ( p l a n e t . F u elN eed ed ( ) ) ; — —<br />

}<br />

П <strong>е</strong> р <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> ...<br />

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

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

Saved successfully!

Ooh no, something went wrong!