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

來源:互聯網
上載者:User

在講委託,事件之前,我想問大家一個非常簡單的問題,也許在我們日常的編程中基本上每天都會遇到,但是卻往往不去瞭解的地方,請以下代碼:
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編譯環境自動產生的,搞的這麼清楚幹什麼,能用就行了唄,不就是個表單載入事件、點擊按鈕事件嘛,第二種人可能馬上會去百度,Google一下

會馬上得出查詢結果
第一個,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篇文章,是關於人生的

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

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.