C#事件 的讲解
一、事件的本質
事件是軟件系統里的兩個子系統之間,或者兩個模塊之間,或者兩個對象之間發送消息,并處理消息的過程。在面向對象的世界里,就可以統一認為是兩個對象之間的行為。
兩個對象之間發送的這種消息,對發送方來講是產生一個事件,對接受方來講是需要處理某個事件。這種消息可以是用戶操作產生的或者軟件系統里的某個對象產生的。
對象之間的事件處理從上圖可見,對象一產生一個事件,這個事件發生以后需要對象二執行某種動作。這就是事件機制。對象一是事件的產生者,或者發送者;對象二是事件的接收者或者訂閱者。對象一產生某種消息,需要對象二響應并處理這給消息,這就是事件的本質。
以往的很多軟件系統都在采用事件機制處理很多問題。例如從最本質的計算機體系中的軟中斷處理,到masm中的jump,到c/c++中的回調函數等等。只不過越高級的軟件系統處理事件或者其提供的很多處理方法越接近人的思維,而越遠離機器思維。構建軟件系統的方法從本質上就是從機器思維走向人的思維的過程。
?
二、事件機制的好處
1、直接調用
采用事件機制有什么好處?事件發送者為什么不直接調用事件接受者提供的處理函數呢?
調用機制如果所示,兩個對象之間的調用機制。對象B調用對象A的方法,可以通過函數指針或者跳轉(匯編語言)等實現。這種方法造成的結果是A和B的緊密耦合,即B對A有很強的依賴性。可以看成B是事件的發布者,A是事件的響應和處理者。不過這種機制用事件機制解釋從理論上就比較牽強了。同一種事物,其實現的思想不一樣。
現在假設有個對象C也要響應B的事件。那么,按照上面的這種機制,需求修改對象B的代碼,調用對象C的方法。這樣機制造成了非常強的依賴關系。代碼的修改和擴展非常麻煩。如果對象越多,這種關系越多,整個系統越復雜。如果一個系統里面對象很多,這種依賴關系也很多的情況下,這種調用關系就會十分復雜,對系統的健壯性和優良性會造成影響。
2、回調機制
如果按照c#的委托思想,B需要事先提供對事件處理函數的某些回調指針。這樣,其它對象,例如A和C就去修改它的回調指針,把自己的方法聯系到上面。但是它們之間的耦合關系就比上面簡單了。回調機制
回調機制的思想已經比較接近委托的概念。其實委托在本質上也就和回調指針差不多,只是概念上更加高級。對象B作為事件的發布者,事先定義一些回調函數指針,然后在本地合適的地方調用這些指針指向的函數。而事件訂閱者或者處理者A和C所作的就是讓給這些空指針賦值,把自己的事件處理方法賦給它,從而實現B調用A和C的方法。
在C?或C++?中與委托最為相似的是函數指針。然而,函數指針只能引用靜態函數,而委托可以引用靜態方法和實例方法。當委托引用實例方法時,委托不僅存儲對方法入口點的引用,還存儲對為其調用該方法的類實例的引用。與函數指針不同,委托是面向對象、類型安全并且安全的。
?
轉載于:https://www.cnblogs.com/jilodream/archive/2012/11/01/4222776.html
總結
- 上一篇: vba基本操作 -- 常用功能
- 下一篇: windows .bat获取XCOPY返