大白話系列之C#委託與事件講解(序言)

在講委託,事件之前,我想問大家一個非常簡單的問題,也許在我們日常的編程中基本上每天都會遇到,但是卻往往不去了解的地方,請以下代碼:
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnSearch_Click(object sender, ImageClickEventArgs e)
{

}

protected void grdBill_RowDataBound(object sender, GridViewRowEventArgs e)
{
          
}

 protected void grdBill_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
           
}

看完之後大家是不是很熟悉,是不是我們每天都遇到過的,但是大家有沒有想過所有方法中的兩個參數(sender,e),到底是什麼意思,有的人可能會說,這些

都是VS編譯環境自動生成的,搞的這麼清楚幹什麼,能用就行了唄,不就是個窗體加載事件、點擊按鈕事件嘛,第二種人可能馬上會去百度,谷歌一下

會馬上得出查詢結果
第一個,sender,也就是引起事件的那個對象
第二個,e,包含了事件的信息

哦!第一個表示事件的對象,第二個表示事件的信息,貌似好像雲裏霧裏的,接着查:
摘自網絡的師生的一段對話:

大李推了推眼鏡,反問我道:“你應該對Windows編程中的事件驅動程序設計很熟悉吧?”

“是呀!”看來反問是大李授課的開篇詞了,但我也只好先往他的圈套裏跳,“事件驅動就是說應用程序的執行流程是由外界發生的事件所確定的。也就是接受到任務才工作的模式。事件就是一個信號,它告知應用程序有重要情況要發生。實際上的執行情況是,各個應用程序把負責不同工作的對象在其運行期間送入Windows操作系統,讓這些對象等待Windows產生的事件,然後加以處理。”

 

“VB程序員一般也只需要象你這樣理解就行了。”大李的話真讓我觸動,“應該說是Windows先產生消息,應用程序中的窗口程序window procedure能接收來自windows的消息,並將其轉化爲事件,這個我們以後再說。現在來看看事件驅動程序的組成,主要是有事件、對象和事件處理程序三個要素。對象就是完成任務的主體,比如你說的Button1;事件麼,就是對象要執行的任務,比如單擊,就是click事件;那麼事件處理程序就是Button1_Click這段程序了。”

 

“這個我知道呀!我只是想問一下Sender……”我疑惑地迴應道。

 

大李哥搖搖手,打斷了我的話。“如果你真正清楚事件驅動的話,就明白了。你看一下,Sender是什麼類型的變量?”

 

“object呀!”我無奈地問道着,“但是,……”我隱約感覺到了什麼。

 

大李微笑着說,“sender as object,就一語道破它的來源與用途。object是支持 .NET 框架類層次結構中的所有類,併爲派生類提供低級別服務。這是 .NET 框架中所有類的最終超類;它是類型層次結構的根。一般來說,sender在形參中表示引發事件的源頭,就是我剛纔所說的三要素中的‘對象’。如果在控件引發的事件中寫代碼的話,一般都不需要再重新指派,因爲它已經默認爲是該控件了。當自己寫代碼來調用某事件程序時,就要註明sender是何物了。”

 

“也就是說,sender是提供給在事件處理程序代碼內部或外部進行調用的嗎?”我仍有點不明白。

 

“可以這樣說,你難道看不出VB.NET提供給我們的是更全面、更直接的控制嗎?再說e,表示的是事件數據,就是一個事件激發所需要的狀態信息。在事件引發時不向事件處理程序傳遞狀態信息的事件會將e設爲Eventargs。如果事件處理程序需要狀態信息,則應用程序必須從此類派生一個類來保存數據。比如Mousedown事件,系統需要判斷mouse的位置、判斷是左中右哪個鍵點擊了、判斷點擊了幾下等等,因此該e就必需是System.Windows.Forms.MouseEventArgs類的實例。”

 

看完這段對話後,大家可能對什麼是Sender和e,有了初步的瞭解,但是讓你應用,或者更深層次的舉一反三,我想很多人只能呆坐了。

以上只是我引出委託、事件的序言而已,委託與事件的使用廣泛,是毋庸置疑的,但是在我們日常編程中,怎麼去應用來更好的使用C#給我們這樣利器,我會在下一講使用大白話的方式、從潛入深的講解。

 

首頁推薦不能放,我就放這裏好了

大白話系列之C#委託與事件講解(一)  

大白話系列之C#委託與事件講解(二)

 

 

推薦2篇文章,是關於人生的

 爲什麼我們做不到【領導篇】

 爲什麼我們做不到【員工篇】

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章