隨筆 - 78  文章 - 25  trackbacks - 0
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114333
          • 排名 - 515

          最新評論

          閱讀排行榜

          評論排行榜

          ■事件:事件是一種函數回調機制,它通過委托來實現函數回調。
          使用事件之前,首先在需要上報的類中聲明一個事件,通常包含兩個步驟:
          (1)定義一個委托類型(EventHandler)表示時間處理函數的類型
          (2)在類中用關鍵字event聲明一個EventHandler類型的事件,事件同樣具有訪問性,通常為public

          delegate void MyEventHandler(Object sender,EventArgs e)
          class EventClass{
              public event MyEventHandler MyEvent;
          }
          ■注冊和注銷事件
          一個類的使用者需要處理類的事件,通常需要3個步驟:
          (1)為要處理的事件增加處理函數
          (2)將事件處理函數通過+=運算符注冊到要處理的事件
          (3)處理完成后,通過-=運算符注銷不需要的事件處理函數


          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;

          namespace EventDelegate
          {
              delegate 
          void MyEventHandler(Object sender,EventArgs e);
              
          class EventClass {
                  
          public event MyEventHandler MyEvent;
                  
          protected void OnMyEvent(EventArgs e) {
                      System.Console.WriteLine(
          "EventClass:Ready to fire a MyEvent");
                      
          if (this.MyEvent != null) {
                          System.Console.WriteLine(
          "EventClass:fire a MyEvent");
                          
          this.MyEvent(this, e);
                      }
                  }
                  
          public void FireEvent() {
                      
          this.OnMyEvent(EventArgs.Empty);
                  }
              }
              
          class Program
              {
                  
          static void GetAEvent(object sender, EventArgs e) {
                      System.Console.WriteLine(
          "GetAEvent:Get a Event EventClass.MyEvent");
                  }
                  
          static void Main(string[] args)
                  {
                      EventClass eventClass 
          = new EventClass();
                      eventClass.MyEvent 
          += new MyEventHandler(GetAEvent);
                      eventClass.FireEvent();
                      eventClass.MyEvent 
          -= new MyEventHandler(GetAEvent);
                      eventClass.FireEvent();
                      System.Console.ReadLine();
                  }
              }
          }

          運行結果:
          EventClass:Ready to fire a MyEvent
          EventClass:fire a MyEvent
          GetAEvent:Get a Event EventClass.MyEvent
          EventClass:Ready to fire a MyEvent



          posted on 2009-10-26 16:31 期待明天 閱讀(507) 評論(0)  編輯  收藏 所屬分類: CSharp
          主站蜘蛛池模板: 尉氏县| 诏安县| 芦溪县| 柏乡县| 阿合奇县| 汪清县| 雷山县| 隆尧县| 宁河县| 枞阳县| 永泰县| 长兴县| 芜湖市| 乌审旗| 伊金霍洛旗| 金乡县| 泸定县| 田阳县| 济阳县| 新昌县| 定襄县| 库尔勒市| 雅江县| 安庆市| 镶黄旗| 荣昌县| 奉贤区| 石阡县| 繁峙县| 大理市| 汾阳市| 于田县| 嘉荫县| 德阳市| 盐津县| 蒙自县| 黔西| 福海县| 菏泽市| 建阳市| 富裕县|