C#語言知識點整理-事件-創(chuàng)新互聯(lián)

一、事件的感性認識:

成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)十年經(jīng)驗成就非凡,專業(yè)從事成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,成都網(wǎng)頁設(shè)計,成都網(wǎng)頁制作,軟文營銷,廣告投放等。十年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:028-86922220,我們期待您的來電!

   現(xiàn)實生活中的“事件”無所不在,時刻都在發(fā)生,軟件層面上的常見事件無非是鼠標事件、鍵盤事件、操作系統(tǒng)自己發(fā)出的事件。

   事件的發(fā)送方稱作為發(fā)布者(sender),接收事件的一方稱作訂閱者(receiver),一個事件可以有多個訂閱者。 一個訂閱者可處理來自多個發(fā)布者的多個事件。典型的多對多關(guān)系。

   發(fā)布者和訂閱者互相都不了解,只是通過Delegate委托來在之間交互,委托在這里起到了“媒人”作用。同時.net的事件機制很容易實現(xiàn)設(shè)計模式的觀察者模式。

二、事件的不嚴格定義:

   1) 事件是特殊類型的多路廣播委托

   2) 向其他類或?qū)ο筇峁┩ㄖ囊环N方式。

三、例子:

   MSDN上有幾個例子,我綜合了下,作為編寫事件的模板吧

1: 
2: using System;
3: using System.Collections.Generic;
4: using System.Linq;
5: using System.Text;
6: 
7: namespace CSharp.Event
8: {
9:     public delegate void MyEventHandler(string s);
10: 
11:     public interface IPublisher
12:     {
13:         // 接口可聲明事件。
14:         event EventHandler<CustomEventArgs> RaiseCustomEvent;
15:         //自定義事件訪問器,可選
16:         event MyEventHandler OnMyEvent;
17:     }
18: 
19:     /// <summary>
20:     /// 自定義EventArgs類,用來保存事件信息
21:     /// </summary>
22:     public class CustomEventArgs : EventArgs
23:     {
24:         private string message;
25: 
26:         public string Message
27:         {
28:             get { return message; }
29:             set { message = value; }
30:         }
31: 
32:         public CustomEventArgs(string s)
33:         {
34:             message = s;
35:         }
36: 
37:     }
38: 
39:     /// <summary>
40:     /// 發(fā)布者
41:     /// </summary>
42:     class Publisher : IPublisher
43:     {
44:         object objectLock = new Object();
45:         //使用EventHandler<T> 聲明事件
46:         public event EventHandler<CustomEventArgs> RaiseCustomEvent;
47:         private event MyEventHandler _myEventHandler;
48: 
49:         /// <summary>
50:         ///  在大多數(shù)情況下都不需要提供自定義的事件訪問器。
51:         ///  如果您在代碼中沒有提供自定義的事件訪問器,編譯器會自動添加事件訪問器。
52:         /// </summary>
53:         public event MyEventHandler OnMyEvent
54:         {
55:             add
56:             {
57:                 lock (objectLock)
58:                 {
59:                     _myEventHandler += value;
60:                 }
61:             }
62:             remove
63:             {
64:                 lock (objectLock)
65:                 {
66:                     _myEventHandler -= value;
67:                 }
68:             }
69:         }
70: 
71:         public void DoSomething()
72:         {
73:             //省略。。。
74: 
75:             //自己引發(fā)事件
76:             OnRaiseCustomEvent(new CustomEventArgs("Did something"));
77:             //省略。。。
78: 
79:             if (_myEventHandler != null)
80:             {
81: 
82:                 _myEventHandler("你輕輕的走,不帶走一片云彩!");
83:             }
84: 
85:         }
86: 
87:         /// <summary>
88:         /// 公開protected virtual方法,允許繼承類重寫事件調(diào)用行為
89:         /// </summary>
90:         /// <param name="e"></param>
91:         protected virtual void OnRaiseCustomEvent(CustomEventArgs e)
92:         {
93:             EventHandler<CustomEventArgs> handler = RaiseCustomEvent;
94: 
95:             //如果沒有訂閱者,事件為空
96:             if (handler != null)
97:             {
98:                 e.Message += String.Format(" at {0}", DateTime.Now.ToString());
99: 
100:                 //觸發(fā)事件
101:                 handler(this, e);
102:             }
103:         }
104: 
105:
106:     }
107: 
108:     /// <summary>
109:     /// 訂閱者
110:     /// </summary>
111:     class Subscriber
112:     {
113:         private string id;
114:         public Subscriber(string ID, Publisher pub)
115:         {
116:             id = ID;
117:             //多路廣播委托實現(xiàn)事件訂閱
118:             pub.RaiseCustomEvent += HandleCustomEvent;
119:             pub.OnMyEvent += new MyEventHandler(pub_OnMyEvent);
120:         }
121: 
122:         void pub_OnMyEvent(string s)
123:         {
124:             Console.WriteLine(string.Format("{0} 的開場白:{1}", id, s));
125:         }
126: 
127:         /// <summary>
128:         /// 當(dāng)訂閱者接收到事件,該做什么反應(yīng)
129:         /// 也就是常說的事件處理邏輯
130:         /// </summary>
131:         /// <param name="sender"></param>
132:         /// <param name="e"></param>
133:         void HandleCustomEvent(object sender, CustomEventArgs e)
134:         {
135:             Console.WriteLine(id + " received this message: {0}", e.Message);
136:         }
137:     }
138: 
139:     class Program
140:     {
141:         static void Main(string[] args)
142:         {
143:             //實例一個發(fā)布者
144:             Publisher pub = new Publisher();
145:             //實例兩個訂閱者sub1,sub2,他們計劃收聽pub
146:             Subscriber sub1 = new Subscriber("sub1", pub);
147:             Subscriber sub2 = new Subscriber("sub2", pub);
148: 
149:             //發(fā)布者通過DoSomething觸發(fā)事件,開始發(fā)布信息
150:             pub.DoSomething();
151: 
152:             Console.WriteLine("Press Enter to close this window.");
153:             Console.ReadLine();
154:         }
155:     }
156: }

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

網(wǎng)頁名稱:C#語言知識點整理-事件-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article34/idise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT域名注冊、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站制作、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)