C 委託與事件講解(序言)

2022-02-07 21:05:22 字數 1794 閱讀 2135

在講委託,事件之前,我想問大家乙個非常簡單的問題,也許在我們日常的程式設計中基本上每天都會遇到,但是卻往往不去了解的地方,請以下**:

protected void page_load(object sender, eventargs e)

protected void grdbill_rowdeleting(object sender, gridviewdeleteeventargs e)

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

會馬上得出查詢結果

第乙個,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 委託與事件講解(序言)

在講委託,事件之前,我想問大家乙個非常簡單的問題,也許在我們日常的程式設計中基本上每天都會遇到,但是卻往往不去了解的地方,請以下 protected void page load object sender,eventargs e protected void grdbill rowdeleting...

C 委託與事件講解 三

protected void btnsearch click object sender,imageclickeventargs e 那他們到底表示什麼呢?在回答上面的問題之前,我們先搞懂 net framework的編碼規範 一 委託型別的名稱都應該以eventhandler結束。二 委託的原型定...

C 委託與事件講解 二

什麼是事件?event?點選事件?載入事件?一連串的模糊的概念衝擊著我們弱小的腦袋 那我們首先來看一下比較正統的感念吧 事件是類在發生其關注的事情時用來提供通知的一種方式。事件的發生一般都牽扯2個角色 事件發行者 publisher 乙個事件的發行者,也稱作是傳送者 sender 其實就是個物件,這...