. Стиллмен, Дж. Грин - Изучаем 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