事件是c#中另一高階概念,使用方法和委託相關。奧運會參加百公尺的田徑運動員聽到槍聲,比賽立即進行。其中槍聲是事件,而運動員比賽就是這個事件發生後的動作。不參加該項比賽的人對槍聲沒有反應。
從程式設計師的角度分析,當裁判員槍聲響起,發生了乙個事件,裁判員通知該事件發生,參加比賽的運動員仔細聽槍聲是否發生。運動員是該事件的訂閱者,沒有參賽的人不會注意,即沒有訂閱該事件。
c#中使用事件需要的步驟:
1、建立乙個委託;
2、將建立的委託與特定事件關聯(.net類庫中的很多事件都是已經定製好的,所以他們也就有相應的乙個委託,在編寫關聯c#事件處理程式--也就是當有事件發生時我們要執行的方法的時候我們需要和這個委託有相同的簽名);
3、編寫c#事件處理程式;
4、利用編寫的c#事件處理程式生成乙個委託例項;
5、把這個委託例項新增到產生事件物件的事件列表中去,這個過程又叫訂閱事件。
一、定義事件
定義事件時,發生者首先要定義委託,然後根據委託定義事件。定義事件的語法如下:
《訪問修飾符》 event 委託名 事件名;
定義事件時,一定要有乙個委託型別,用這個委託型別來定義處理事件的方法型別。下面定義乙個發布者類,並在其內部定義eventrun事件。
1 class judgment二、訂閱事件2
定義好事件後,與事件有關的人會訂閱事件,只有訂閱事件的物件才會收到發生事件的通知,沒有訂閱該事件的物件則不會收到通知。訂閱事件的語法如下:
事件名+=new 委託名(方法名);
假如方法名為run,那麼訂閱事件eventrun的**如下:
judgment.eventrun+=new judgment.delegaterun(runsport.run);
judgment為類judgment的物件,runsport為運動員類runsports的物件,run為其中的方法。
事件的訂閱通過「+=」操作符來實現,可以給事件加乙個或多個方法委託。
三、引發事件
一般都是在滿足某個條件下引發事件,裁判員槍聲一響,引發運動員奔跑這個事件。在程式設計中可以用條件詰句,也可以使用方法引發事件。
1
2
3
4
public
void
begin()
這段**中,通過begin方法引發事件enentrun。引發事件的語法與呼叫方法的語法相同,引發該事件時,將呼叫訂閱事件的物件的所有委託。下面**演示裁判員槍聲響起到引發運動員比賽的動作,完整**:
1 using system;judgment類為事件發布者,runsports類為事件訂閱者。引發事件的方法為begin();。乙個事件可以有多個訂閱者,事件的發布者也可以是事件的訂閱者。2 using system.collections.generic;
3 using system.linq;
4 using system.text;
5 6 namespace example_eventtest
7 19 }
20 class runsports
21
27 }
28 class program
29
40 }
41 }
C 事件 使用事件需要的步驟
事件是c 中另一高階概念,使用方法和委託相關。奧運會參加百公尺的田徑運動員聽到槍聲,比賽立即進行。其中槍聲是事件,而運動員比賽就是這個事件發生後的動作。不參加該項比賽的人對槍聲沒有反應。從程式設計師的角度分析,當裁判員槍聲響起,發生了乙個事件,裁判員通知該事件發生,參加比賽的運動員仔細聽槍聲是否發生...
C 事件 使用事件需要的步驟
事件是c 中另一高階概念,使用方法和委託相關。奧運會參加百公尺的田徑運動員聽到槍聲,比賽立即進行。其中槍聲是事件,而運動員比賽就是這個事件發生後的動作。不參加該項比賽的人對槍聲沒有反應。從程式設計師的角度分析,當裁判員槍聲響起,發生了乙個事件,裁判員通知該事件發生,參加比賽的運動員仔細聽槍聲是否發生...
如何使用事件
事件有很多,比如說滑鼠的事件 mousermove,mouserdown等,鍵盤的事件 keyup,keydown,keypress。有事件,就會有對事件進行處理的方法,而事件和處理方法之間是怎麼聯絡起來的呢?委託就是他們中間的橋梁,事件發生時,委託會知道,然後將事件傳遞給處理方法,處理方法進行相應...