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

Д<strong>е</strong>л<strong>е</strong>гат зам<strong>е</strong>ща<strong>е</strong>т м<strong>е</strong>тоды<br />

нужно только указать<br />

Возникающ<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> он мож<strong>е</strong>т<br />

ссылаться.<br />

Для этого в <strong>C#</strong> сущ<strong>е</strong>ствуют д <strong>е</strong> л <strong>е</strong> г а т ы ( d e le g a te ) . Это ссылочный тип, позволяю- !<br />

щий с с ы л а т ь с я н а м <strong>е</strong> т о д ы в н у т р и к л а с с а ... такж<strong>е</strong> д<strong>е</strong>л<strong>е</strong>гаты являются основой<br />

А<br />

для событий.<br />

Данный д<strong>е</strong>л<strong>е</strong>гат мож<strong>е</strong>т ссылаться<br />

нд любой м<strong>е</strong>тод, ис­<br />

В этой глав<strong>е</strong> вам уж<strong>е</strong> приходилось с ними сталкиваться! При создании<br />

события BalllnPlay вы работали с д<strong>е</strong>л<strong>е</strong>гатом EventHandler. пользующий в кач<strong>е</strong>ств<strong>е</strong> парам<strong>е</strong>тров<br />

оь<strong>е</strong>кт и EventArgs<br />

Щ<strong>е</strong>лкнит<strong>е</strong> на н<strong>е</strong>м правой кнопкой мыщи и выб<strong>е</strong>рит<strong>е</strong> команду «Go to<br />

definition», и вот что вы увидит<strong>е</strong>.<br />

и н<strong>е</strong> возвращающий знач<strong>е</strong>ния.<br />

public delegate void EventHandler(object sender, EventArgs e) \<br />

Этот эл<strong>е</strong>м<strong>е</strong>нт сигнатуры д<strong>е</strong>л<strong>е</strong>гата<br />

показыва<strong>е</strong>т, что EventHandler мож<strong>е</strong>т<br />

ссылаться только на м<strong>е</strong>тоды, н<strong>е</strong><br />

возвращающи<strong>е</strong> знач<strong>е</strong>ния.<br />

Имя д<strong>е</strong>л<strong>е</strong>гата<br />

EventHandler.<br />

V<br />

^<br />

у п ] ^ а ж н <strong>е</strong> н и <strong>е</strong><br />

Добавля<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> к т C o n s o le A p p lic a t io n и добавьт<strong>е</strong><br />

к н<strong>е</strong>му новый файл классов ConvertsIntToString.cs. Вв<strong>е</strong>дит<strong>е</strong> одну строчку:<br />

d e l e g a t e s t r i n g C o n v e r t s I n t T o S t r i n g ( i n t i ) ;<br />

Добавьт<strong>е</strong> в класс Program м<strong>е</strong>тод HiThere ():<br />

p r i v a t e s t a t i c s t r i n g H i T h e r e ( i n t i)<br />

{ 'F -<br />

r e t u r n "Hi there! #" + (i * 100)<br />

)<br />

Заполнит<strong>е</strong> м<strong>е</strong>тод Main ():<br />

s t a t i c v o i d M a i n ( s t r i n g [] args)<br />

{<br />

Сигнатура этого<br />

м<strong>е</strong>тода совпада<strong>е</strong>т<br />

с ReturnsAString.<br />

Ещ<strong>е</strong> одним добавл<strong>е</strong>нным в про<strong>е</strong>кт<br />

д<strong>е</strong>л<strong>е</strong>гатом явля<strong>е</strong>тся<br />

ConvertsIntToString. Его можно<br />

использовать для объявл<strong>е</strong>ния<br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нных точно так ж<strong>е</strong>, как<br />

вы д<strong>е</strong>лали бы это для класса или<br />

инт<strong>е</strong>рф<strong>е</strong>йса.<br />

someMetkod — это п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нная типа<br />

ConvertsIntToString. От обычной ссылочной<br />

п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нной она отлича<strong>е</strong>тся т<strong>е</strong>м, что цка-<br />

^ зыва<strong>е</strong>т н<strong>е</strong> на объ<strong>е</strong>кт в куч<strong>е</strong>, а на м<strong>е</strong>т о1<br />

C o n v e r t s I n t T o S t r i n g s o m e M e t h o d = n e w C o n v e r t s I n t T o S t r i n g ( H i T h e r e ) ;<br />

s t r i n g m e s s a g e = s o m e M e t h o d (5);<br />

c o n s o l e . w r i t e L i n e ( m e s s a g e ) ; д П <strong>е</strong> р <strong>е</strong> м <strong>е</strong> н н о й<br />

}<br />

П<strong>е</strong>р<strong>е</strong>м<strong>е</strong>нная someMethod указыва<strong>е</strong>т на м<strong>е</strong>тод HiThere (). Записью someMethod (5) вызыва<strong>е</strong>тся м<strong>е</strong>тод<br />

HiThere (), которому п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>тся аргум<strong>е</strong>нт 5. В итог<strong>е</strong> возвраща<strong>е</strong>тся строкаН1 there!#500. Просмотрит<strong>е</strong><br />

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

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

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

Saved successfully!

Ooh no, something went wrong!