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

黄舟
發布: 2017-01-21 15:28:47
原創
1518 人瀏覽過

  事件為類別和類別的實例提供了向外界發送通知的能力,實現了物件與物件之間的通信,如果定義了一個事件成員,表示該類型具有1.能夠在事件中註冊方法 (+=操作符實現)。 2.能夠在事件中註銷方法(-=操作符實作)。 3.當事件被觸發時註冊的方法會被通知(事件內部維護了一個註冊方法清單)。委託(Delegate)是事件(event)的載體,要定義事件就的要有委託。  有關委託的內容請點選 委託(Delegate)  進入了解。

 

聲明一個事件:

             在類別中的內部聲明事件,且必須先宣告此事件的委託類型。例如:

     pulic delegate void  MyDelegateHandler(object sender,EventArgs e);
登入後複製

         然後基於上面的例子,再聲明事件,使用關鍵字event

                  pulic event MyDelegateHandler MyEvent;
登入後複製

   (object類型是所有類的基類,有關他的詳情   (object類型是所有類的基類,有關他的詳情 了嗎包含事件資料的類別的基類,用於傳遞事件的細節。那家超市有一個自動門,就是當我們走近一定距離(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)  的內容,更多相關內容請關注PHP中文網(www.php.cn)!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!