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.

см<strong>е</strong>рть объ<strong>е</strong>кта<br />

Модификатор ref<br />

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

i n t , d o u b l e , s t r u c t и л и д р уго го зн а ч и м о го т и п а вы ф а кти ч <strong>е</strong> ски п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>т<strong>е</strong> к о п и ю это ­<br />

го знач<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>дача по ссылк<strong>е</strong>.<br />

Э то р<strong>е</strong>ализу<strong>е</strong>тся п р и п о м о щ и м одиф и ка то р а r e f . К а к и м о д и ф и ка то р o u t , о н и сп о л ь ­<br />

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

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

с м одиф и ка то р о м r e f буд<strong>е</strong>т р <strong>е</strong>дактироваться н <strong>е</strong> п о ср <strong>е</strong> д ств<strong>е</strong>нно м<strong>е</strong>тодом.<br />

Д обавьт<strong>е</strong> к програм м <strong>е</strong> м<strong>е</strong>тод, ч т о б ы п о см о тр <strong>е</strong> ть, как э^о работа<strong>е</strong>т;<br />

public void ModifyAnlntAndButton(ref int value, ref Button button)<br />

}<br />

int i value;<br />

i *= 5;<br />

value = i - 3-<br />

button = buttonl;<br />

? Задавая знач<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> ЬиПопг^Сиск{).<br />

Д обавим к н о п к у с о б р а б о тчико м со б ы ти я для вы зова м<strong>е</strong>тода;<br />

В отличи<strong>е</strong> от а р ­<br />

гум <strong>е</strong>нт а, пом<strong>е</strong>ч<strong>е</strong>нного<br />

м одиф икат о­<br />

ром ref, аргум<strong>е</strong>нт ,<br />

пом<strong>е</strong>ч<strong>е</strong>нный м одиф<br />

икат ором out, н<strong>е</strong><br />

т р<strong>е</strong>бу<strong>е</strong>т инициализации<br />

п<strong>е</strong>р<strong>е</strong>д <strong>е</strong>го<br />

п<strong>е</strong>р<strong>е</strong>оач<strong>е</strong>й.<br />

private void button2_Click{object sender, EventArgs e) { быбоЭытся d? = 4^7,<br />

int q - 100;<br />

b.Text = buttonl-, так как<br />

Button b = buttons;<br />

М<strong>е</strong>тод пом<strong>е</strong>нял Знач<strong>е</strong>ния<br />

ModifyAnlntAndButton(ref q, ref b);<br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нных q и b.<br />

Console.WriteLine("q = {0}, b.Text = {1}' q, b .Text);<br />

П р и вы зов<strong>е</strong> о б р а б о тчиком b u t t o n 2 _ C l i c k {) м <strong>е</strong>тода M o d i f y A n l n t A n d B u t t o n () п<strong>е</strong>р<strong>е</strong>м <strong>е</strong>нны <strong>е</strong> q и b<br />

п<strong>е</strong>р<strong>е</strong>даю тся п о ссы лк<strong>е</strong>. М <strong>е</strong> то д M o d i f y A n l n t A n d B u t t o n ( ) работа<strong>е</strong>т с н и м и , как с л ю б ы м и д р уги м и п<strong>е</strong>р<br />

<strong>е</strong> м <strong>е</strong>нны м и . Н о благодаря п<strong>е</strong>р<strong>е</strong>дач<strong>е</strong> п о ссы лк<strong>е</strong> о н вс<strong>е</strong> вр<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>тода q и Ь будут им <strong>е</strong>ть о тр <strong>е</strong> д а кти р о в а н н ы <strong>е</strong> знач<strong>е</strong>ния.<br />

Запустит<strong>е</strong> р <strong>е</strong> ж и м отладки и добавьт<strong>е</strong> к п <strong>е</strong>р<strong>е</strong>м <strong>е</strong> н н ы м q и Ь ко н тр о л ь н ы <strong>е</strong> знач<strong>е</strong>ния, ч т о б ы п о н я ть , как всё<br />

работа<strong>е</strong>т.<br />

Рассмотрим парам<strong>е</strong>тр out. встро<strong>е</strong>нный в значимый тип. Иногда строку вида ’"5S.&7”<br />

нужно пр<strong>е</strong>образовать в знач<strong>е</strong>ни<strong>е</strong> типа double. Это можно сд<strong>е</strong>лать при помош,и м <strong>е</strong>­<br />

тода double.Parse("3S,(p7”). Но запись double.ParseC'xyz“) прив<strong>е</strong>д<strong>е</strong>т к исключ<strong>е</strong>нию<br />

FormatEKception. Иногда тр<strong>е</strong>бу<strong>е</strong>тся им<strong>е</strong>нно такой р<strong>е</strong>зульт ат , а иногда тр<strong>е</strong>бу<strong>е</strong>тся<br />

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

м<strong>е</strong>тод TryParseQ: запись double.TryParse("xyz'’, out d) в<strong>е</strong>рн<strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong> false и присвоит<br />

парам<strong>е</strong>тру i знач<strong>е</strong>ни<strong>е</strong> Oj в то вр<strong>е</strong>мя как запись doub(e.TryParseC'3S.t>7”, out d)<br />

в<strong>е</strong>рн<strong>е</strong>т знач<strong>е</strong>ни<strong>е</strong> true и присвоит п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной d знач<strong>е</strong>ни<strong>е</strong> 35.

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

Saved successfully!

Ooh no, something went wrong!