<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    302班

    java突擊隊
    posts - 151, comments - 74, trackbacks - 0, articles - 14
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    委托與事件

    Posted on 2007-06-15 19:45 停留的風 閱讀(142) 評論(0)  編輯  收藏
    c#用委托來實現事件通知機制。委托相當與c++函數指針。整個過程涉及一個呼叫者,一個被呼叫者,還有就是這個委托。

    - 實現步驟

    有以下幾步: 1. 申明委托, 2.定義呼叫者和調用的函數, 3.定義被呼叫者和具體實現的函數(被調用的函數)

    1.申明委托 ,在包里或者類里,
    public
      public delegate void PlayGame(Object sender, EventArgs e); 

    2.定義呼叫者(類LetsGame)和調用委托的函數,在呼叫者里要有委托的實例(呼叫者扔出一個委托,被呼叫者給這個委托賦值)
    class LetsGame{ 
        
    public event PlayGame theGame; 
        
    public void startPlay(EventArgs e){ 
            
    if(theGame != null){ 
            theGame(
    this,e); 
        } 

    3. 定義被呼叫者(類MS)和具體實現的函數(被調用的函數),也就是concrete class的實現或者叫函數指針實例。打個比方,在一個叫MS的類中實現.MS中對呼叫者中委托的實例進行賦值.
    class MS {
        
    public MS(LetsGame lg) {
            lg.theGame 
    += new PlayGame(MSPlayGame);
        }
        
    public void MSPlayGame(Object sender, EventArgs e){ 
            Console.WriteLine(
    "Who laughs the last who wins"); 
        } 
    }

    這樣當調用LetsGame.startPlay的時候就會調用MS.MSPlayGame.


    - 實際應用

    對照一下c#的GUI事件處理或者asp.net的web控件事件處理,能幫我們更好的理解委托和事件.大家一定很熟悉asp.net里下面的代碼
    private void InitializeComponent()
    {    
        
        
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    }


    private void Button1_Click(object sender, System.EventArgs e)
    {
        
    //do sth
    }

    這就是用委托來實現事件.你可能發現我們并沒有給它聲明委托對象并通過event關鍵字來引用該委托對象,那是因為asp.net早就幫我們做好了該項工作,其委托對象是System.EventHandler. Button1相當于上面的LetsGame的實例,是呼叫者,Button1_Click是被呼叫方法.當你click Button1后,Button1就會調用Button1_Click.

    -雜項

    我覺得這種機制和design pattern里的observer很類似,我們完全可以用observer來達到同樣的效果,但是用委托更靈活,不需要定義一個interface然后所有的concrete class都實現某個方法,函數指針(委托)更靈活.

    還有,委托不一定非要和事件一起用,單獨用的時候就是函數指針.

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 欧美最猛性xxxxx免费| a毛看片免费观看视频| 亚洲a级在线观看| 亚洲国产模特在线播放| 成人精品国产亚洲欧洲| 三上悠亚在线观看免费| 国产片AV片永久免费观看| 午夜精品射精入后重之免费观看| 一级做a爰全过程免费视频| 亚洲成在人线av| 亚洲一区二区三区高清不卡 | 亚洲?v无码国产在丝袜线观看 | 国产AV无码专区亚洲AV毛网站| 黄色视屏在线免费播放| 国产精品成人免费福利| 国产啪亚洲国产精品无码| 亚洲第一精品电影网| 免费在线观看一区| 亚洲三级在线免费观看| 久久精品国产亚洲7777| 中国极品美軳免费观看| 亚洲AV第一页国产精品| 无忧传媒视频免费观看入口| 2022中文字字幕久亚洲| 亚洲精品国产av成拍色拍| 18禁美女黄网站色大片免费观看| 国产99视频免费精品是看6| 日韩精品亚洲人成在线观看| 精品无码专区亚洲| 亚洲综合色视频在线观看| 女同免费毛片在线播放| 亚洲自偷自偷偷色无码中文| 亚洲精品久久无码| 日韩精品亚洲aⅴ在线影院| 67194国产精品免费观看| 亚洲精品国产综合久久久久紧| 亚洲色欲一区二区三区在线观看 | 亚洲成av人片在www鸭子| 中文字幕亚洲一区二区三区| 无码国产精品一区二区免费模式 | 亚洲成AV人片在线观看无|