事件為類和類的執行個體提供了向外界發送通知的能力,實現了對象與對象之間的通訊,如果定義了一個事件成員,表示該類型具有 1.能夠在事件中註冊方法 (+=操作符實現)。 2.能夠在事件中登出方法(-=操作符實現)。 3.當事件被觸發時註冊的方法會被通知(事件內部維護了一個註冊方法列表)。委託(Delegate)是事件(event)的載體,要定義事件就的要有委託。 有關委託的內容請點擊 委託(Delegate) 進入瞭解。
聲明一個事件:
在類的內部聲明事件,首先必須聲明該事件的委託類型。例如:
pulic delegate void MyDelegateHandler(object sender,EventArgs e);
然後基於上面的例子,再聲明事件,使用關鍵字 event
pulic event MyDelegateHandler MyEvent;
(object類型是所有類的基類,有關他的詳情前面已經說過了點擊 object類型 進入瞭解,EventArgs 是包含事件數目據的類的基類,用於傳遞事件的細節。)
寫一個事件執行個體:
每周的星期六我有一個雷打不動的習慣,喜歡去學校外面的一個超市買東西,那家超市有一個自動門,就是當我們走近一定距離(3米)的時候會自動開啟,還會十分溫柔與親切的說“歡迎光臨”,因為我經常去他家買東西,辦理了會員,所以每當我走近的時候自動門好像認識我,非常熱情的說“熱烈歡迎HC666光臨本超市^_^”這個門倒是挺好玩那
上面的例子中將“自動門”看作一個由Door執行個體化的對象,“我”是一個由person執行個體化的對象,當我調用“去超市”的動作,並且距離超市門口3米的時候,觸發我們定義的“Enterdoor”事件,然而Enterdoor裡面使用委託註冊了一個“自動門(door)”的“開門(Opendoor)”動作,相當於調用了開門方法,這樣就達到了對象與對象之間的通訊與交流,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { //定義一個person類,裡麵包含了方法 class person { public string name = "HC666"; private int distance; //聲明委託 public delegate void EnterdoorHandler(object sender,EnterdoorArgs e); //基於委託聲明事件 public event EnterdoorHandler Enterdoor; //定義的一個去超市的方法,當距離 distance<=3的時候觸發事件 public void GotoStore() { for (int i = 6; i > 0; i--) { distance = i; if (i <= 3) {//觸發事件了 EnterdoorArgs e = new EnterdoorArgs(distance); OnEnterdoor(e);//調用觸發事件方法 } } } public void OnEnterdoor(EnterdoorArgs e) {//呼叫事件裡註冊的方法 if (Enterdoor != null) Enterdoor(this, e); else Console.WriteLine("沒有添加處理方法"); } //定義一個包含事件數目據的類,這裡distance是一個判斷的重要資料 public class EnterdoorArgs:EventArgs { public int distance; public EnterdoorArgs(int distance) { this.distance = distance; } } } //定義門這個類 class Door {//定義開門的方法 public void Opendoor(object sender, person.EnterdoorArgs e) { person per = (person)sender; //有點熟悉吧,顯示類型轉換中有談到 if (e.distance == 3) { Console.WriteLine("尊敬的顧客您距離本超市 {0}米 即將開門迎接您", e.distance); } if(e.distance <3) Console.WriteLine("熱烈歡迎 {0} 光臨本超市", per.name); } } class program { static void Main(string[] args) { person per = new person(); //執行個體化對象 Door door = new Door(); //向事件中註冊開門的方法 per.Enterdoor += door.Opendoor; //我去超市 per.GotoStore(); } } }
結果:
以上就是 C#學習日記24----事件(event) 的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!