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