日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

规范的.net 事件原理

發布時間:2024/8/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 规范的.net 事件原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

<接著上一篇事件委托講解>

.net framework 事件設計準則
1 聲明delegate時,使用void 類型當作返回值,EventName事件的事件委托是

EventNameEventHandler,事件接受兩個傳入參數,一律命名為sender和e。
2 定義一個提供事件數據的類。對類以EventNameEventArgs進行命名,從system.EventArgs派生該

類,然后添加所有事件特定的成員
public delegate void EventNameEventHandler(object sender,EventNameEventArgs e);
EventNameEventArgs用于封裝事件的多個參數,這個類可以自己寫但必須繼承EventArgs
class EventNameEventArgs:EventArgs
{
?...
}

3 在引發事件的類中提供一個手保護的方法,以OnEventName進行命名。在該方法中引發事件
protected virtual void OnEventName(EventArgs e)
{
?if(EventName!=null)
?{
??EventName(this,e);
?}
}

?

?1using?System;
?2using?System.Collections.Generic;
?3
?4namespace?event3
?5{
?6????class?PubEventArgs:EventArgs//提供事件所需要的數據
?7????{
?8????????private?readonly?string?m_magazineName;
?9????????private?readonly?DateTime?m_pubDate;
10????????public?PubEventArgs(string?magazineName,DateTime?pubDate)
11????????{
12????????????this.m_magazineName=magazineName;
13????????????this.m_pubDate=pubDate;
14????????}

15????????public??string?magazineName
16????????{
17????????????get{return?m_magazineName;}
18????????}

19????????public?DateTime?pubDate
20????????{
21????????????get{return?m_pubDate;}
22????????}

23????}

24????
25????class?Publisher?//出版社
26????{
27????????public?delegate?void?PubComputerEventHandler(object?sender,PubEventArgs?e);?//事件所需的代理?委托是種類
28????????public?delegate?void?PubLifeEventHandler(object?sender,PubEventArgs?e);
29????????public?event?PubComputerEventHandler?PubComputer=null;//事件的聲明
30????????public?event?PubLifeEventHandler?PubLife=null;
31????????
32????????protected?virtual?void?OnPubComputer(PubEventArgs?e)
33????????{
34????????????PubComputerEventHandler?handler=PubComputer;?//臨時委托變量
35????????????if(handler!=null)
36????????????{
37????????????????handler(this,e);
38????????????}

39????????}

40????????
41????????protected?virtual?void?OnPubLife(PubEventArgs?e)
42????????{
43????????????PubLifeEventHandler?handler=PubLife;?//臨時委托變量
44????????????if(handler!=null)
45????????????{
46????????????????handler(this,e);
47????????????}

48????????}

49????????
50????????public?void?issuComputer(string?magazineName,DateTime?pubDate)?//觸發訂閱電腦雜志事件的方法
51????????{
52????????????Console.WriteLine("發行"+magazineName);
53????????????OnPubComputer(new?PubEventArgs(magazineName,pubDate));
54????????????Console.ReadLine();
55????????}

56????????
57????????public?void?issuLife(string?magazineName,DateTime?pubDate)?
58????????{
59????????????Console.WriteLine("發行"+magazineName);
60????????????OnPubLife(new?PubEventArgs(magazineName,pubDate));
61????????????Console.ReadLine();
62????????}

63????}

64????
65????class?Subscriber?//訂閱者
66????{
67????????private?string?name;
68????????public?Subscriber(string?name)
69????????{
70????????????this.name=name;
71????????}

72????????public?void?Receive(object?sender,PubEventArgs?e)//在事件訂閱者中定義事件處理程序
73????????{
74????????????Console.WriteLine(e.pubDate+"?"+name+"已經收到了"+e.magazineName);
75????????}

76????}

77????
78????class?Story?//故事發生在訂閱者和出版社之間
79????{
80????????static?void?Main()
81????????{
82????????????Publisher?Pub=new?Publisher();
83????????????Subscriber?zs=new?Subscriber("張三");
84????????????Pub.PubLife+=new?Publisher.PubLifeEventHandler(zs.Receive);//張三訂閱生活雜志
85????????????Subscriber?ls=new?Subscriber("李四");//李四也訂閱了電腦、生活雜志
86????????????Pub.PubComputer+=new?Publisher.PubComputerEventHandler(ls.Receive);
87????????????Pub.PubLife+=new?Publisher.PubLifeEventHandler(ls.Receive);
88????????????Pub.issuComputer("《電腦》雜志",Convert.ToDateTime("2008-11-28"));?//收到事件后做出的處理
89????????????Pub.issuLife("《生活》雜志",Convert.ToDateTime("2008-11-28"));
90????????????//一年后李四由于經濟危機取消了《生活》雜志的訂閱
91????????????Console.WriteLine("一年后李四由于經濟危機取消了《生活》雜志的訂閱");
92????????????Pub.PubLife-=new?Publisher.PubLifeEventHandler(ls.Receive);
93????????????Pub.issuComputer("《電腦》雜志",Convert.ToDateTime("2009-11-28"));?
94????????????Pub.issuLife("《生活》雜志",Convert.ToDateTime("2009-11-28"));
95????????}

96????}

97}

轉載于:https://www.cnblogs.com/hemood/archive/2008/11/27/1342639.html

總結

以上是生活随笔為你收集整理的规范的.net 事件原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。