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


Разработка.типа,.поддерживающего.событие Этап 2. Определение члена-события



Download 6,27 Mb.
Pdf ko'rish
bet205/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   201   202   203   204   205   206   207   208   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

289
Разработка.типа,.поддерживающего.событие
Этап 2. Определение члена-события
В C# событие объявляется с ключевым словом 
event
. Каждому члену-событию 
назначаются область действия (практически всегда он открытый, поэтому доступен 
из любого кода), тип делегата, указывающий на прототип вызываемого метода (или 
методов), и имя (любой допустимый идентификатор). Вот как выглядит член-
событие нашего класса 
NewMail
:
internal class MailManager {
// Этап 2. Определение члена-события
public event EventHandler NewMail;
...
}
Здесь 
NewMail
— имя события, а типом события является 
EventHandler MailEventArgs>
. Это означает, что получатели уведомления о событии должны 
предоставлять метод обратного вызова, прототип которого соответствует типу-
делегату 
EventHandler
. Так как обобщенный делегат 
System.
EventHandler
определен следующим образом:
public delegate void EventHandler
(Object sender, TEventArgs e) where TEventArgs: EventArgs;
Поэтому прототип метода должен выглядеть так:
void MethodName(Object sender, NewMailEventArgs e);
ПриМеЧание
Многих.удивляет,.почему.механизм.событий.требует,.чтобы.параметр.sender.имел.
тип.Object .Вообще-то,.поскольку.MailManager.—.единственный.тип,.реализующий.
события.с.объектом.NewMailEventArgs,.было.бы.разумнее.использовать.следующий.
прототип.метода.обратного.вызова:
void MethodName(MailManager sender, NewMailEventArgs e);
Причиной.того,.что.параметр.sender.имеет.тип.Object,.является.наследование .
Что.произойдет,.если.MailManager.задействовать.в.качестве.базового.класса.для.
создания.класса.SmtpMailManager?.В.методе.обратного.вызова.придется.в.про-
тотипе.задать.параметр.sender.как.SmtpMailManager,.а.не.MailManager,.но.этого.
делать.нельзя,.так.как.тип.SmtpMailManager.просто.наследует.событие.NewMail .
Поэтому.код,.ожидающий.от.SmtpMailManager.информацию.о.событии,.все.равно.
будет.вынужден.приводить.аргумент.sender.к.типу.SmtpMailManager .Иначе.говоря,.
приведение.все.равно.необходимо,.поэтому.параметр.sender.с.таким.же.успехом.
можно.объявить.с.типом.Object 
Еще.одна.причина.для.объявления.sender.с.типом.Object.—.гибкость,.поскольку.
делегат.может.применяться.несколькими.типами,.которые.поддерживают.событие,.
передающее.объект.NewMailEventArgs .В.частности,.класс.PopMailManager.мог.бы.
использовать.делегат,.даже.если.бы.не.наследовал.от.класса.MailManager 


290
Глава.11 .События
И.еще.одно:.механизм.событий.требует,.чтобы.в.имени.делегата.и.методе.обратного.
вызова.параметр,.производный.от.EventArgs,.назывался.«e» .Такое.требование.уста-
навливается.по.единственной.причине:.для.обеспечения.единообразия,.облегчающе-
го.и.упрощающего.изучение.и.реализацию.событий.разработчиками .Инструменты.
создания.кода.(например,.такой.как.Microsoft.Visual.Studio).также.«знают»,.что.нужно.
вызывать.параметр.e 
И.последнее:.механизм.событий.требует,.чтобы.все.обработчики.возвращали.void .
Это.обязательно,.потому.что.при.возникновении.события.могут.выполняться.не-
сколько.методов.обратного.вызова.и.невозможно.получить.у.них.все.возвращаемое.
значение .Тип.void.просто.запрещает.методам.возвращать.какое.бы.то.ни.было.
значение .К.сожалению,.в.библиотеке.FCL.есть.обработчики.событий,.в.частности.
ResolveEventHandler,.в.которых.Microsoft.не.следует.собственным.правилам.и.воз-
вращает.объект.типа.Assembly 

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   201   202   203   204   205   206   207   208   ...   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