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><br />

БоИ роС Ь!<br />

типы и ссылки<br />

J > Я до сих пор н<strong>е</strong> оч<strong>е</strong>нь понимаю,<br />

как работают ссыпки.<br />

Q ; Ссылки — это способ доступа к м<strong>е</strong>тодам<br />

и полям. Создав ссылку на объ<strong>е</strong>кг Dog,<br />

вы получа<strong>е</strong>т<strong>е</strong> возможность пользоваться<br />

любыми м<strong>е</strong>тодами, опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нными для этого<br />

объ<strong>е</strong>кта. Для н<strong>е</strong>статич<strong>е</strong>ских м<strong>е</strong>тодов D o g .<br />

Bark () и D o g . Beg () можно опр<strong>е</strong>д<strong>е</strong>лить<br />

ссылку sp o t. Посл<strong>е</strong> ч<strong>е</strong>го для доступа к<br />

ним достаточно написать s p o t . Bark ()<br />

и s p o t . Beg (). Ссылки позволяют<br />

р<strong>е</strong>дакгировать поля объ<strong>е</strong>кта. Наприм<strong>е</strong>р, для<br />

вн<strong>е</strong>с<strong>е</strong>ния изм<strong>е</strong>н<strong>е</strong>ний в пол<strong>е</strong> B reed достаточно<br />

написать s p o t . Breed.<br />

Получа<strong>е</strong>тся, что р<strong>е</strong>дактируя<br />

объ<strong>е</strong>кт поср<strong>е</strong>дством одной ссылки,<br />

я м<strong>е</strong>няю <strong>е</strong>го знач<strong>е</strong>ни<strong>е</strong> для остальных<br />

ссылок?<br />

Q ; Да. Если r o v e r ссыла<strong>е</strong>тся на тот<br />

ж<strong>е</strong> объ<strong>е</strong>кт, что и spot, зам<strong>е</strong>нив r o v e r .<br />

B reed на beagle вы получит<strong>е</strong> знач<strong>е</strong>ни<strong>е</strong><br />

beagle и для s p o t . Breed.<br />

П : я н<strong>е</strong> понимаю, поч<strong>е</strong>му п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нны<strong>е</strong><br />

^зны х типов им<strong>е</strong>ют разный разм<strong>е</strong>р.<br />

Зач<strong>е</strong>м это нужно?<br />

^ ! П<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нны<strong>е</strong> опр<strong>е</strong>д<strong>е</strong>ляют разм<strong>е</strong>р<br />

присваива<strong>е</strong>мого знач<strong>е</strong>ния. Если вы объявит<strong>е</strong><br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нную типа lo n g и присвоит<strong>е</strong><br />

<strong>е</strong>й знач<strong>е</strong>ни<strong>е</strong> (наприм<strong>е</strong>р, 5), CLR вс<strong>е</strong> равно<br />

выд<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>няться.<br />

CLR пр<strong>е</strong>дполага<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 />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нная хранит н<strong>е</strong>большо<strong>е</strong> знач<strong>е</strong>ни<strong>е</strong>,<br />

но потом оно мож<strong>е</strong>т стать большим. По- •<br />

этому для н<strong>е</strong><strong>е</strong> заран<strong>е</strong><strong>е</strong> выд<strong>е</strong>л<strong>е</strong>н нужный<br />

объ<strong>е</strong>м памяти.<br />

Напомнит<strong>е</strong> мн<strong>е</strong> <strong>е</strong>щ<strong>е</strong> раз, какую<br />

( )ункцию выполня<strong>е</strong>т ключ<strong>е</strong>во<strong>е</strong> слово<br />

t h i s ?<br />

Q ; t h i s — это сп<strong>е</strong>циальная п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нная,<br />

использу<strong>е</strong>мая только внутри объ<strong>е</strong>кта.<br />

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

экз<strong>е</strong>мпляра. Это пол<strong>е</strong>зно при работ<strong>е</strong><br />

с классом, м<strong>е</strong>тоды которого обращаются<br />

к другим классам. Объ<strong>е</strong>кт мож<strong>е</strong>т п<strong>е</strong>р<strong>е</strong>дать<br />

ссылку на с<strong>е</strong>бя другому объ<strong>е</strong>кту. Если<br />

S p ot вызыва<strong>е</strong>т один из м<strong>е</strong>тодов R over<br />

при помощи парам<strong>е</strong>тра t h i s , объ<strong>е</strong>кт<br />

R over получа<strong>е</strong>т ссылку на объ<strong>е</strong>кт Spot.<br />

Экз<strong>е</strong>мпляры объ<strong>е</strong>ктов<br />

используют<br />

ключ<strong>е</strong>во<strong>е</strong> слово this<br />

дая ссылки па самих<br />

с<strong>е</strong>бя.<br />

КЛЮЧЕВЫЕ<br />

МОМЕНТЫ<br />

При рассмотр<strong>е</strong>нии модификатора var<br />

в глав<strong>е</strong> 1 4 вы узна<strong>е</strong>т<strong>е</strong>, в каком случа<strong>е</strong> тип<br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной н<strong>е</strong> обьявля<strong>е</strong>тся заран<strong>е</strong><strong>е</strong>.<br />

Объявляя п<strong>е</strong>р<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>ния<br />

знач<strong>е</strong>ний разного разм<strong>е</strong>ра. Для огромных чис<strong>е</strong>л<br />

используйт<strong>е</strong> тип long — а для самых мал<strong>е</strong>ньких (до<br />

255) — bytes.<br />

Н<strong>е</strong>возможно присвоить знач<strong>е</strong>ни<strong>е</strong> больш<strong>е</strong>го типа п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной,<br />

принадл<strong>е</strong>жащ<strong>е</strong>й к м<strong>е</strong>ньш<strong>е</strong>му типу.<br />

При работ<strong>е</strong> с константами используйт<strong>е</strong> суффикс F<br />

для обознач<strong>е</strong>ния типа float (15.6F), а суффикс М —<br />

для обознач<strong>е</strong>ния типа decimal (36.12М).<br />

Н<strong>е</strong>которы<strong>е</strong> типы могут пр<strong>е</strong>образовываться друг<br />

в друга автоматич<strong>е</strong>ски (наприм<strong>е</strong>р, short в int).<br />

Для других случа<strong>е</strong>в используйт<strong>е</strong> оп<strong>е</strong>рацию прив<strong>е</strong>д<strong>е</strong>ния<br />

типов.<br />

Зар<strong>е</strong>з<strong>е</strong>рвированны<strong>е</strong> слова (наприм<strong>е</strong>р, for, while,<br />

using, new) н<strong>е</strong>льзя использовать в кач<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 />

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

Если на объ<strong>е</strong>кт н<strong>е</strong>т ни одной ссылки, он отправля<strong>е</strong>тся<br />

в мусор, и м<strong>е</strong>сто, занима<strong>е</strong>мо<strong>е</strong> им в памяти, освобожда<strong>е</strong>тся.<br />

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

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

Saved successfully!

Ooh no, something went wrong!