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>р<strong>е</strong>числ<strong>е</strong>ния и колл<strong>е</strong>кции<br />

П<strong>е</strong>р<strong>е</strong>крыти<strong>е</strong> м<strong>е</strong>тода T oStringO<br />

Вс<strong>е</strong> объ<strong>е</strong>кты .N E T им <strong>е</strong> ю т м <strong>е</strong> т о д T o S t r i n g ( ) , п р <strong>е</strong> о б р а з у ю щ и й о б ъ <strong>е</strong> к т в ст р о к у . П о ум о л чанию о н возвращ<br />

а<strong>е</strong>т им я класса ( M y P r o j e c t .D u ck ). Э то т м<strong>е</strong>тод унасл<strong>е</strong>дован о т класса O b j e c t (к о т о р ы й явля<strong>е</strong>тся<br />

базовым для л ю б о го объ<strong>е</strong>кта). О п <strong>е</strong> р а то р +, со <strong>е</strong> д и н яю щ и й с тр о к и а в т о м а т и ч <strong>е</strong> с к и , в ы з ы в а <strong>е</strong> т м <strong>е</strong> т о д<br />

T o S t r i n g ( ) . М <strong>е</strong>тоды C o n s o l e . W r i t e L i n e () и л и S t r i n g . F o rm a t () та к ж <strong>е</strong> автом атич<strong>е</strong>ски вы зы ваю т<br />

<strong>е</strong>го п р и п<strong>е</strong>р<strong>е</strong>дач<strong>е</strong> им объ<strong>е</strong>ктов.<br />

В п р о грам м <strong>е</strong> с о р т и р о в к и у т о к п о м <strong>е</strong> сти т<strong>е</strong> то ч к у о станова в м <strong>е</strong>тод M a in () посл<strong>е</strong> и н и ц и а л и з а ц и и колл<strong>е</strong>к-<br />

ц и и и запустит<strong>е</strong> отладку п р о гр а м м ы . Зат<strong>е</strong>м н а в <strong>е</strong> д и т <strong>е</strong> у к а з а т <strong>е</strong> л ь м ы ш и н а л ю б у ю п <strong>е</strong> р <strong>е</strong> м <strong>е</strong> н н у ю d u c k s ,<br />

ч т о б ы знать <strong>е</strong><strong>е</strong> знач<strong>е</strong>ни<strong>е</strong>. У ви д <strong>е</strong> ть п р и отладк<strong>е</strong> сод<strong>е</strong>рж им о<strong>е</strong> к о л л <strong>е</strong> кц и и м о ж н о , щ <strong>е</strong>лкнув на к н о п к <strong>е</strong> со<br />

знаком<br />

сл<strong>е</strong>ва о т и м <strong>е</strong> н и п <strong>е</strong> р <strong>е</strong> м <strong>е</strong> нной:<br />

И Ф ducfes'Count = 6 )<br />

□ Ф ducks C ount = 6<br />

ш ^ т {MyProject.Dudî,}<br />

ш V [11 flHvProject.Dudt}<br />

[2] {MyProject.Duck}<br />

М<strong>е</strong>тод ToStringO вызыва<strong>е</strong>тся при от о­<br />

браж<strong>е</strong>нии обь<strong>е</strong>кта в окн<strong>е</strong> Watch. Но ш # И ^yP rojectD uck}<br />

м<strong>е</strong>тод ToStringOJ унасл<strong>е</strong>дованный классом<br />

Риск от класса Object, возвраща<strong>е</strong>т ш é т {MyProject.Dudc}<br />

ш ФЫ flHyProject.Duck><br />

только имя класса. Мы мож<strong>е</strong>м сд<strong>е</strong>лать ш # Raw View<br />

этот м<strong>е</strong>тод бол<strong>е</strong><strong>е</strong> информативным.<br />

Вм<strong>е</strong>сто п<strong>е</strong>р<strong>е</strong>дачи знач<strong>е</strong>ния<br />

м<strong>е</strong>тодам Console.<br />

WriteLineO, String.<br />

FormatQ и т. п., можно<br />

п<strong>е</strong>р<strong>е</strong>дать им обь<strong>е</strong>кт.<br />

Его м<strong>е</strong>тод ToStringO<br />

буд<strong>е</strong>т вызван автоматич<strong>е</strong>ски.<br />

(Это работа<strong>е</strong>т<br />

и для значимых типов,<br />

таких как int и enums!)<br />

х<br />

И та к , вы в и д и т<strong>е</strong> , ч т о ко л л <strong>е</strong> кц и я с о д <strong>е</strong> р ж и т ш <strong>е</strong>сть объ<strong>е</strong>кто в D u ck (M y P ro je c t — это п р о с тр а н с тв о им <strong>е</strong>н,<br />

в к о то р о м м ы н а ходим ся ). Щ <strong>е</strong> л ч о к на к н о п к <strong>е</strong> (сл<strong>е</strong>ва о т н о м <strong>е</strong> р а у гк и ) показы ва<strong>е</strong>т з н а ч<strong>е</strong>ния п арам <strong>е</strong>тров<br />

K in d и S i z e . Н о н<strong>е</strong>льзя л и сд<strong>е</strong>лать так, ч т о б ы вся и н ф о р м а ц и я показы валась одновр<strong>е</strong>м <strong>е</strong>нно?<br />

T o S t r i n g О - э то в и р т у а л ь н ы й м <strong>е</strong>тод класса Obj e c t , к о т о р ы й явля<strong>е</strong>тся базовы м п о о т н о ш <strong>е</strong> н и ю к л ю ­<br />

бому объ<strong>е</strong>кту. Т ак ч т о вам оста<strong>е</strong>тся то л ь к о п <strong>е</strong> р <strong>е</strong> к р ы т ь м <strong>е</strong> т о д T o S t r i n g O , и вы у в и д и т<strong>е</strong> р<strong>е</strong>зультаты<br />

в о кн<strong>е</strong> w atch! О т к р о й т <strong>е</strong> класс D u ck и добавьт<strong>е</strong> н о в ы й м <strong>е</strong>тод с кл ю ч <strong>е</strong> вы м словом o v e r r i d e . П о сл <strong>е</strong> наж<br />

а ти я П р о б <strong>е</strong> л а п о я в и тс я с п и с о к д о с т у п н ы х для п <strong>е</strong> р <strong>е</strong> к р ы ти я м <strong>е</strong>тодов:<br />

override<br />

= ♦ E q u a ls ( o b je c t o b j)<br />

G e tH a s h C o d e O<br />

T oStrin gO<br />

I s t r i n g o b j e c t J o S t r l n g O<br />

I Returns a System .String that represents the current S^çtem.Objsct.<br />

В ы б <strong>е</strong> р и т<strong>е</strong> в а р и а н т T o S tr in g () и зам <strong>е</strong>нит<strong>е</strong> сод<strong>е</strong>рж им о<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 />

{<br />

r e t u r n "A " + S i z e + " in c h " + K in d .T o S t r in g 0 ;<br />

З а пустит<strong>е</strong> п р о гр а м м у и снова п о с м о тр и т<strong>е</strong> на ко л л <strong>е</strong> кц и ю . Т <strong>е</strong>п<strong>е</strong>рь вы в и д и т<strong>е</strong> вс<strong>е</strong> св<strong>е</strong>д<strong>е</strong>ния о Duck!<br />

В # d u c k s C o u n t = 6<br />

Ш t [0] {A 17mdi Maliard}<br />

Ш<br />

{A 18 iid i №jscovy><br />

Ш 9 m {A H in d i Decoy)<br />

ffl Фт {A 11 inch Misrnvy}<br />

ШФ [4] {A 14indiMa8ard}<br />

ffl #151 {A 13 indi Decoy}<br />

Ш Ч) Raw ¥iew<br />

Чтобы показать обь<strong>е</strong>кт,<br />

отладчик вызыва<strong>е</strong>т м<strong>е</strong>тод<br />

ToStringOдальш<strong>е</strong><br />

> 365

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

Saved successfully!

Ooh no, something went wrong!