DotNet規(guī)范的委托和事件寫法: 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(); } 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ā)出事件的對象 如果是按鈕button的話,那sender就是那個button, e是事件參數(shù),在某些事件里,e用處不大,比如在MouseEventArgs的Mouse事件中,可以看到e包括mouse的坐標(biāo)值等,以供你的程序使用。 具體的說來,對于系統(tǒng)提供的類的事件,Sender參數(shù)只是簡單地傳遞了指向引發(fā)事件的那個類的實例的一個引用,而e是EventArgs類型的參數(shù),它包含了事件所攜帶的信息。 |
|
來自: 悟靜 > 《.net和asp.net》