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.

*<br />

п<strong>е</strong>р<strong>е</strong>числ<strong>е</strong>ния и колл<strong>е</strong>кции<br />

и н т <strong>е</strong> р ф <strong>е</strong> й с IC o m p a r a b le < D ( ie k ><br />

М <strong>е</strong> то д L i s t . S o r t О ум<strong>е</strong><strong>е</strong>т со р ти р о в а ть о б ъ <strong>е</strong> кты л ю б о го т и п а и классы ,<br />

к о то р ы <strong>е</strong> р <strong>е</strong> а л и з у ю т и н т <strong>е</strong> р ф <strong>е</strong> й с 1 С о т р а г а Ы <strong>е</strong> < Т > . В состав<strong>е</strong> э т о го и н т <strong>е</strong> р ­<br />

ф <strong>е</strong>йса н а хо д и тся то л ь ко м <strong>е</strong>тод С о т р а г<strong>е</strong> Т о { ) . S o r t ( ) , к о т о р ы й использу<strong>е</strong>т<br />

м <strong>е</strong>тод С о т р а г<strong>е</strong> Т о () объ<strong>е</strong>кта для ср а в н <strong>е</strong> н и я с д р уги м и объ<strong>е</strong>ктам и. В озвращ<br />

а<strong>е</strong>мо<strong>е</strong> знач<strong>е</strong>ни<strong>е</strong> (т и п а in t) показы ва<strong>е</strong>т, к то д о л ж <strong>е</strong> н б ы ть п<strong>е</strong>рвы м .<br />

Для ко л л <strong>е</strong> кц и й объ<strong>е</strong>ктов, ко то р ы <strong>е</strong> н<strong>е</strong> р<strong>е</strong>ализую т и н т<strong>е</strong>рф <strong>е</strong>йс IC o m p a -<br />

г а Ы <strong>е</strong> < Т > , в .N E T им <strong>е</strong><strong>е</strong>тся д руго й способ. М <strong>е</strong>тод S o r t () м о ж н о п<strong>е</strong>р<strong>е</strong>дать экз<strong>е</strong>мпляру<br />

класса, р<strong>е</strong>ализую щ <strong>е</strong>го IC o m p a re r< T > . Э то т инт<strong>е</strong>рф <strong>е</strong>йс то ж <strong>е</strong> им <strong>е</strong><strong>е</strong>т<br />

вс<strong>е</strong>го один м<strong>е</strong>тод и позволя<strong>е</strong>т задавать сп<strong>е</strong>циальны <strong>е</strong> способы со р ти р о вки.<br />

М<strong>е</strong>тод Сотраг<strong>е</strong>ТоО сраВниба<strong>е</strong>т два объ<strong>е</strong>кта<br />

М о ж н о о тр <strong>е</strong> д а кти р о в а ть класс D u c k та ки м образом , ч т о б ы о н начал р<strong>е</strong>ализо<br />

в ы вать и н т<strong>е</strong> р ф <strong>е</strong> й с IC o m p a ra b le < D u c k > . Д ля э то го добавим м <strong>е</strong>тод<br />

С о т р а г<strong>е</strong> Т о ( ) , и сп о л ь зую щ и й ссы лку на объ<strong>е</strong>кт D u c k в кач<strong>е</strong>ств<strong>е</strong> парам<strong>е</strong>тра.<br />

Е сли утка, взятая для сравн<strong>е</strong>ния, д о л ж н а оказаться посл<strong>е</strong> анализиру<strong>е</strong>м<br />

ой у тк и , м<strong>е</strong>тод С о т р а г<strong>е</strong> Т о {) возвращ а<strong>е</strong>т п о л о ж и т<strong>е</strong> л ь н о <strong>е</strong> число.<br />

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

мож<strong>е</strong>т работать<br />

со встро<strong>е</strong>нным<br />

м<strong>е</strong>тодом<br />

Sort ( ) объ<strong>е</strong>кта<br />

List с помощью<br />

IComparable<br />

и Сотраг<strong>е</strong>То().<br />

О б н о в и т<strong>е</strong> класс D u c k пут<strong>е</strong>м р <strong>е</strong> ализа ц ии и н т<strong>е</strong> р ф <strong>е</strong> й са IC o m p a ra b le < D u c k > ,<br />

ч т о б ы о т с о р т и р о в а ть у т о к п о разм<strong>е</strong>ру:<br />

c l a s s D u c k : I C o m p a r a b l e < D u c k > {<br />

p u b l i c i n t S i z e ;<br />

p u b l i c K i n d O f D u c k K i n d ;<br />

Р<strong>е</strong>ализуя 1СомрагаЫ<strong>е</strong> J<br />

вы указыва<strong>е</strong>т<strong>е</strong> тип<br />

парам<strong>е</strong>тра, по которому<br />

осущ<strong>е</strong>ствля<strong>е</strong>тся сравн<strong>е</strong>ни<strong>е</strong>.<br />

Т а к в ы г л я д ^ ^ о л ь ^ p u b l i c i n t С о т р а г <strong>е</strong> Т о ( D u c k d u c k T o C o m p a r e ) {<br />

Г л т » а г <strong>е</strong> Т ^ ( ) - i f ( t h i s . S i z e > d u c k T o C o m p a r e . S i z e )<br />

знам<strong>е</strong>ния п о л <strong>е</strong> й S ^ e<br />

д вц х yvn oK . Е сли<br />

m к о т о р у ю с с ы л а <strong>е</strong> т ­<br />

ся с л о в о this ^o^fc-tue.<br />

-%■<br />

A 6 случа<strong>е</strong> совпад<strong>е</strong>ния<br />

р а з м <strong>е</strong> р о в - ноль. J<br />

}<br />

r e t u r n 1 ;<br />

e l s e i f ( t h i s . S i z e < d u c k T o C o m p a r e . S i z e )<br />

r e t u r n - 1 ;<br />

, Чтобы получить ряд от самой<br />

мал<strong>е</strong>нькой до самой большой<br />

r e t u r n О ;<br />

утки, м<strong>е</strong>тод CompareToQ долж<strong>е</strong>н<br />

возвращать положит<strong>е</strong>льно<strong>е</strong> число<br />

при сравн<strong>е</strong>нии с уткой м<strong>е</strong>ньш<strong>е</strong>го<br />

разм<strong>е</strong>ра.<br />

Д о б а в ь т <strong>е</strong> э т о т к о д в ко н <strong>е</strong> ц м <strong>е</strong>тода M a in { ) до вы зова м <strong>е</strong>тода C o n s o l e .<br />

R e a d K e y О , и ко л л <strong>е</strong> кц и я у то к буд<strong>е</strong>т о тс о р т и р о в а н а п о разм<strong>е</strong>ру. П о м <strong>е</strong> сти т<strong>е</strong><br />

т о ч к у о с т а н о в а в м<strong>е</strong>тод С о т р а г<strong>е</strong> Т о () и воспользуйт<strong>е</strong>сь отл адчи ком , ч т о ­<br />

бы п о н я ть , как вс<strong>е</strong> работа<strong>е</strong>т.<br />

d u c k s . S o r t ( ) ;<br />

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

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

Saved successfully!

Ooh no, something went wrong!