乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C#中的委托和事件

       悟靜 2013-01-08

      DotNet規(guī)范的委托和事件寫法:

      復(fù)制代碼
      public delegate void EventHandler(object sender, EventArgs e); //定義委托類型
      
      public event EventHandler Click; //聲明事件類似于聲明了一個封裝的委托變量
      
      this.btnOpenDB.Click += new System.EventHandler(this.btnOpenDB_Click方法); //注冊方法
      
      private void btnOpenDB_Click(object sender, EventArgs e) //被注冊的方法
      {
           conn = new SqlConnection(conString);
           conn.Open();
      }
      復(fù)制代碼

      object sender,EventArgs e是什么呢?

      說的通俗一些,就是:有一個叫做EventHandler 的家伙,他會告訴你(主程序),有一些事情發(fā)生了:這個事情是誰導(dǎo)致的呢?是某個object類型對象導(dǎo)致的,它用Source或Sender來表示。這個事情是什么事呢?e的內(nèi)容就是事情的內(nèi)容了。 至于Source和Sender,沒有區(qū)別,你想用哪個就用哪個,其實都是一樣的。

      所以,我們在程序中的事件處理函數(shù)就是依賴于這個東西實現(xiàn)的:比方說你點了一個按鈕,程序怎么知道應(yīng)該用哪個函數(shù)來處理這個動作呢?那么EventHandler 這個家伙會告訴程序:"button1(sender)被點擊(e)了,請調(diào)用對應(yīng)的處理函數(shù)"。當(dāng)然這個函數(shù)是誰,這個函數(shù)要做什么,是由你自己寫的。

      再深入一層,這個過程實際上就是:你的動作被windows捕獲,windows把這個動作作為系統(tǒng)消息發(fā)送給程序(可以看message結(jié)構(gòu)),程序從自己的消息隊列中不斷的取出消息,并在消息循環(huán)中尋找對應(yīng)的處理方式,這時message結(jié)構(gòu)中的類似于sender和e的東東就起到了‘引導(dǎo)程序使用正確的處理函數(shù)’的作用。

      歸根究底,這個sender和e及其一整套的處理方式,只不過是windows消息機制的另外一種表現(xiàn)罷了。
      --------------------------------------------------------------------------------

      object sender: 發(fā)出事件的對象
      System.EventArgs e: 對象中的數(shù)據(jù)

      如果是按鈕button的話,那sender就是那個button, e是事件參數(shù),在某些事件里,e用處不大,比如在MouseEventArgs的Mouse事件中,可以看到e包括mouse的坐標(biāo)值等,以供你的程序使用。

      具體的說來,對于系統(tǒng)提供的類的事件,Sender參數(shù)只是簡單地傳遞了指向引發(fā)事件的那個類的實例的一個引用,而e是EventArgs類型的參數(shù),它包含了事件所攜帶的信息。
      ---------------------------------------------------------------------------------
      問:“我看到在很多事件代碼中那些代碼都是照寫(object sender, System.EventArgs e),根本就不用改變sender和e,參數(shù)不是應(yīng)該隨實際情況變化的嗎?”
      答:這句話的意思,比如說一個按鈕控件,當(dāng)它的單擊事件被引發(fā)時,系統(tǒng)會自動把這個按鈕對象作一個類型強制轉(zhuǎn)換然后賦值給Sender,然后傳遞e。之所以都是這個形式是因為大多數(shù)情況下這些簡單的事件不需要傳遞特殊的信息,您可以看一下KeyPress事件,這個事件就包含一個KeyPressEventArgs,包含了按鍵的信息。
      ---------------------------------------------------------------------------------
      另外需要明確的一個概念就是類似這樣形式的方法:
      private void Button_Click(object sender, EventArgs e)
      這樣的方法稱為事件處理方法,它類似于C語言中的事件處理函數(shù),它是在運行時由系統(tǒng)調(diào)用的,因此它的參數(shù)不會變化,就好像我們寫方法時的方法名一樣。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多