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.

никого кром<strong>е</strong> уток!<br />

Восходящ<strong>е</strong><strong>е</strong> прив<strong>е</strong>д<strong>е</strong>ни<strong>е</strong> с помои^ью lEnumerable<br />

П о м н и т <strong>е</strong> о в о з м о ж н о с т и в о с х о д я щ <strong>е</strong> го п р и в <strong>е</strong> д <strong>е</strong> н и я о б ъ <strong>е</strong> кто в к базовом у<br />

классу? П р и р а б о т<strong>е</strong> с о б ъ <strong>е</strong> кта м и L i s t эту о п <strong>е</strong> р а ц и ю м о ж н о п р о д <strong>е</strong> л а ть для<br />

в с<strong>е</strong>й к о л л <strong>е</strong> к ц и и . Э то н азы ва<strong>е</strong>тся к о в а р и а ц и <strong>е</strong> й ( c o v a r ia n c e ), и вам п о тр <strong>е</strong> б у ­<br />

<strong>е</strong>тся т о л ь к о ссы л ка на и н т <strong>е</strong> р ф <strong>е</strong> й с I E n u m e r a b le < T > .<br />

С оздайт<strong>е</strong> консольно<strong>е</strong> п р и л о ж <strong>е</strong> н и <strong>е</strong> и в н<strong>е</strong>м базовы й класс B i r d (<strong>е</strong>го продолж <strong>е</strong>­<br />

н и<strong>е</strong>м буд<strong>е</strong>т класс D uck) и п р о и зв о д н ы й класс P e n g u in . Воспользу<strong>е</strong>мся м<strong>е</strong>тодом<br />

T o S t r i n g ( ) , ч то б ы п онять, гд<strong>е</strong> какой класс.<br />

Name<br />

FlyO<br />

_<br />

Bird<br />

c l a s s B ir d {<br />

}<br />

p u b l i c s t r i n g Name { g e t ; s e t ; }<br />

p u b l i c v o i d F ly O {<br />

}<br />

C o n s o le . W r it e L in e ( "П ол<strong>е</strong>т<strong>е</strong>ли!" );<br />

p u b l i c o v e r r id e s t r i n g T o S tr in g O {<br />

r e t u r n "Имя птицы " + Name;<br />

}<br />

c l a s s P en g u in : B ir d<br />

{<br />

p u b l i c v o i d F ly O {<br />

}<br />

C o n s o le .W r it e L in e ("Пингвины н<strong>е</strong> л<strong>е</strong>таю т!'<br />

p u b l i c o v e r r id e s t r i n g T o S tr in g O {<br />

r e t u r n "Имя пингвина " + b ase.N am e;<br />

}<br />

S ize<br />

Kind<br />

Duck<br />

Penguin<br />

Это класс Bird и насл<strong>е</strong>дующий от н<strong>е</strong>го<br />

класс Penguin. Добавьт<strong>е</strong> ик в новый<br />

про<strong>е</strong>кт типа Console Application, зат<strong>е</strong>м<br />

скопируйт<strong>е</strong> туда ж<strong>е</strong> сущ<strong>е</strong>ствующий<br />

класс Риск, пом<strong>е</strong>няв соотв<strong>е</strong>тствующим<br />

образом <strong>е</strong>го объявл<strong>е</strong>ни<strong>е</strong>.<br />

Л<br />

c l a s s Duck ; B ir d , IC om parable {<br />

/ / О стальной код б <strong>е</strong> з изм<strong>е</strong>н<strong>е</strong>ний<br />

}<br />

В о т п<strong>е</strong>рвы <strong>е</strong> с т р о к и м <strong>е</strong>тода M a in { ) , и н и ц и а л и з и р у ю щ и <strong>е</strong> ко л л <strong>е</strong> к ц и ю и о с у щ <strong>е</strong> с т в л я ю щ и <strong>е</strong> <strong>е</strong> <strong>е</strong> в о с х о д я ­<br />

щ <strong>е</strong> <strong>е</strong> п р и в <strong>е</strong> д <strong>е</strong> н и <strong>е</strong> .<br />

^ ------- ^<br />

, . , ^ , , , , ^ с к о п и р у й т <strong>е</strong> и н и ц и а л и з а т о р д л я к о л л <strong>е</strong> к ц и и ц т о к<br />

L ist< D u ck > du ck s = new L ist< D u c k > () { /* инициализируйт<strong>е</strong> о бъ <strong>е</strong>к т, как обычно * / }<br />

IE n um erab le< B ird> u p ca stD u c k s = d u ck s;<br />

П о с м о тр и т <strong>е</strong> на п о сл<strong>е</strong>дню ю строчку. С сы лку на ко л л <strong>е</strong> к ц и ю L is t < D u c k > в ы п р исваива<strong>е</strong>т<strong>е</strong> и н т <strong>е</strong> р ф <strong>е</strong> й с­<br />

н о й п <strong>е</strong> р <strong>е</strong> м <strong>е</strong> н н о й lE n u m e r a b le < B ir d > . З апустит<strong>е</strong> отладку и уб<strong>е</strong>дит<strong>е</strong>сь, ч т о об<strong>е</strong> ссы л ки указы ваю т на<br />

о д и н и т о т ж <strong>е</strong> объ<strong>е</strong>кт.<br />

Объ<strong>е</strong>диним птиц 6 <strong>е</strong>диную колл<strong>е</strong>кцию<br />

К овариация позволя<strong>е</strong>т добавлить частную колл<strong>е</strong>кц ию к бол<strong>е</strong><strong>е</strong> общ <strong>е</strong>й. С каж<strong>е</strong>м, в колл<strong>е</strong>кц ию объ<strong>е</strong>ктов B i r d<br />

м о ж н о добавить колл<strong>е</strong>кц ию D uck. Вам п р и го д и тся м<strong>е</strong>тод L i s t . A d d R a n g e ''<br />

L is t< B ir d > b i r d s = new L i s t < B ir d > 0 ;<br />

b ir d s.A d d (n e w B ir d O { Name = "П<strong>е</strong>рнаты<strong>е</strong>" } ) ;<br />

b ir d s .A d d R a n g e (u p c a s tD u c k s );<br />

b ir d s.A d d (n e w P e n g u in () { Name = "<strong>Дж</strong>ордж" } ) ;<br />

fo r e a c h (B ird b ir d i n b ir d s ) (благодаря восходящ<strong>е</strong>му пюив<strong>е</strong>-<br />

C o n so ole l e .Wrrit i te eL Lin ine e ( biirr d ) ; д<strong>е</strong>нию y m o K К IEnumerahle

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

Saved successfully!

Ooh no, something went wrong!