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