C#學習日記24----事件(event)

來源:互聯網
上載者:User
事件為類和類的執行個體提供了向外界發送通知的能力,實現了對象與對象之間的通訊,如果定義了一個事件成員,表示該類型具有 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)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.