本文分别介紹Java與C#事件處理,包括介紹在C#中,事件(Events)成員就是用來聲明一個類事件的。
Java與C#事件處理都是實作了事件源-事件響應者機制,但又不完全相同。Java實作的是一種事件源與事件響應者兩級實體對象方式,這裡的事件響應者也是事件監聽者,而C#實作的是一種事件源-代理-事件響應者三級實體對象方式。下面就這兩種方式來具體說明。
Java事件處理
從概念上講,事件是一種在"源對象"和"監聽者對象"之間,某種狀态發生變化的傳遞機制。事件有許多不同的用途,例如在Windows系統中常要處理的滑鼠事件、視窗邊界改變事件、鍵盤事件等。在Java中則是定義了一個一般的、可擴充的事件機制,這種機制能夠:
◆對事件類型和傳遞的模型的定義和擴充提供一個公共架構,并适合于廣泛的應用。
◆與Java語言和環境有較高的內建度。
◆事件能被描述環境捕獲和點火。
◆能使其它構造工具采取某種技術在設計時直接控制事件,以及事件源和事件監聽者之間的聯系。
◆事件機制本身不依賴于複雜的開發工具。
事件從事件源到監聽者的傳遞是通過對目标監聽者對象的Java方法調用進行的。對每個明确的事件的發生,都相應地定義一個明确的Java方法。這些方法都集中定義在事件監聽者(EventListener)接口中,這個接口要繼承 java.util.EventListener。 實作了事件監聽者接口中一些或全部方法的類就是事件監聽者。伴随着事件的發生,相應的狀态通常都封裝在事件狀态對象中,該對象必須繼承自java.util.EventObject。事件狀态對象作為單參傳遞給應響應該事件的監聽者方法中。發出某種特定事件的事件源的辨別是:遵從規定的設計格式為事件監聽者定義注冊方法,并接受對指定事件監聽者接口執行個體的引用。有時,事件監聽者不能直接實作事件監聽者接口,或者還有其它的額外動作時,就要在一個源與其它一個或多個監聽者之間插入一個事件擴充卡類的執行個體,來建立它們之間的聯系。
C#事件處理
在.NET應用程式開發中,不管是WEB Forms(ASP.NET)還是Windows Forms,都涉及到大量對象的事件響應及處理,比如客戶線上送出一份訂單、或是在Windows視窗上移動滑鼠等都将有事件發生。那麼在C#中,是怎樣聲明事件并為事件添加響應方法的呢?
在C#中,事件(Events)成員就是用來聲明一個類事件的。在類中聲明一個事件成員一般采用如下的文法形式:public event 代表名 事件名。如在Control類中聲明了一個Click事件成員,其文法如下:
public event EventHandler Click
在C#中,增加了一個新的資料類型delegate(代表)來解決事件處理問題。代表資料類型非常類似于C語言中的指針,其與指針不同的是,其是代碼是安全的,可管理的。由于C#本身的簡易性,對于沒有使用過C及指針的程式來說,了解delegate也是非常容易的。
在C#中,通過使用delegate,你可以通過“+=”(加等于)操作符非常容易地為.Net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的“-=”(減等于)操作符取消這些響應方法。以上介紹Java與C#事件處理。
本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2010/12/26/1917467.html,如需轉載請自行聯系原作者