Net framework 5, а также среды Visual Studio 2012 и C#


Обратный вызов нескольких методов



Download 6,27 Mb.
Pdf ko'rish
bet324/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   320   321   322   323   324   325   326   327   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Обратный вызов нескольких методов 
(цепочки делегатов)
Делегаты полезны сами по себе, но еще более полезными их делает механизм 
цепочек. 
Цепочкой
(chaining) называется коллекция делегатов, дающая возмож-
ность вызывать все методы, представленные этими делегатами. Чтобы понять, 
как работает цепочка, вернитесь к коду в начале этой главы и найдите там метод 
ChainDelegateDemo1
. В этом методе после инструкции 
Console.WriteLine
созда-
ются три делегата, на которые ссылаются переменные 
fb1

fb2
и 
fb3
соответственно 
(рис. 17.3).


444
Глава.17 .Делегаты
рис. 17.3.
.Начальное.состояние.делегатов,.на.которые.ссылаются.
переменные.fb1,.fb2.и.fb3
Ссылочная переменная на делегат 
Feedback
, которая называется 
fbChain
, долж-
на ссылаться на цепочку, или набор делегатов, служащих оболочками для методов 
обратного вызова. Инициализация переменной 
fbChain
значением 
null
указывает 
на отсутствие методов обратного вызова. Открытый статический метод 
Combine
класса 
Delegate
добавляет в цепочку делегатов:
fbChain = (Feedback) Delegate.Combine(fbChain, fb1);
При выполнении этой строки метод 
Combine
видит, что мы пытаемся объединить 
значение 
null
с переменной 
fb1
. В итоге он возвращает значение в переменную 
fb1
, а затем заставляет переменную 
fbChain
сослаться на делегата, на которого уже 
ссылается переменная 
fb1
. Эта схема демонстрируется на рис. 17.4.
fb Chain
рис. 17.4.
.Состояние.делегатов.после.добавления.в.цепочку.нового.члена


445
Обратный.вызов.нескольких.методов.(цепочки.делегатов)
Чтобы добавить в цепочку еще одного делегата, снова воспользуемся методом 
Combine
:
fbChain = (Feedback) Delegate.Combine(fbChain, fb2);
Метод 
Combine
видит, что переменная 
fbChain
уже ссылается на делегата, поэто-
му он создает нового делегата, который присваивает своим закрытым полям 
_target
и 
_methodPtr
некоторые значения. В данном случае они не важны, но важно, что 
поле 
_invocationList
инициализируется ссылкой на массив делегатов. Первому 
элементу массива (с индексом 0) присваивается ссылка на делегат, служащий обо-
лочкой метода 
FeedbackToConsole
(именно на этот делегат ссылается переменная 
fbChain
). Второму элементу массива (с индексом 1) присваивается ссылка на де-
легат, служащий оболочкой метода 
FeedbackToMsgBox
(на этот делегат ссылается 
переменная 
fb2
). Напоследок переменной 
fbChain
присваивается ссылка на вновь 
созданный делегат (рис. 17.5).

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   320   321   322   323   324   325   326   327   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish