事件是c#中另一高階概念,使用方法和委託相關。奧運會參加百公尺的田徑運動員聽到槍聲,比賽立即進行。其中槍聲是事件,而運動員比賽就是這個事件發生後的動作。不參加該項比賽的人對槍聲沒有反應。
從程式設計師的角度分析,當裁判員槍聲響起,發生了乙個事件,裁判員通知該事件發生,參加比賽的運動員仔細聽槍聲是否發生。運動員是該事件的訂閱者,沒有參賽的人不會注意,即沒有訂閱該事件。
c#中使用事件需要的步驟:
1、建立乙個委託;
委託即c裡的函式指標,在事件中由於要傳遞事件及觸發事件的物件的資訊,因此參數列是固定的。委託名一般格式是:名字+envenhandle。這樣取名比較規範。
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。引發事件的語法與呼叫方法的語法相同,引發該事件時,將呼叫訂閱事件的物件的所有委託。下面**演示裁判員槍聲響起到引發運動員比賽的動作,完整**:
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
example_eventtest7
19}20class
runsports
2127}28
class
program
2940
}41 }
judgment類為事件發布者,runsports類為事件訂閱者。引發事件的方法為begin();。乙個事件可以有多個訂閱者,事件的發布者也可以是事件的訂閱者。
C 中事件的使用
用乙個例子來說明事件的使用。建立乙個簡單的類,名為filewatch,包含事件onfilechange。該類將檢查在執行應用程式的目錄 當前 目錄,通常是專案名 bin debug 下,是否存在檔案test.txt。如果檔案被刪除或建立,都將觸發事件。同時提供乙個方法monitorfile以不斷地查...
C 中事件的使用
用乙個例子來說明事件的使用。建立乙個簡單的類,名為filewatch,包含事件onfilechange。該類將檢查在執行應用程式的目錄 當前 目錄,通常是專案名 bin debug 下,是否存在檔案test.txt。如果檔案被刪除或建立,都將觸發事件。同時提供乙個方法monitorfile以不斷地查...
C 中事件與方法的異同
首先,給出解析用的 void m event eventhandler e virtual void one eventargs e 對於某乙個流程s if k 0 else 這與如下的改動s有什麼不同 if k 0 else 為區別起見稱些改動後的流程為s s 是否可能存在不能夠被s代替的可能性....