事件(events)尋根(一)

2022-05-18 07:52:19 字數 1207 閱讀 8356

昨天說到現在正在研讀jeffery richter(後面簡稱jr)大師的《clr via c#》

,聆聽著大師透徹的說理,是一種享受。於是按部就班地順次閱讀,一直到第10章,終於遇到了真正的難點,這個難點就是事件(events),確切地說是對事件實現的理解。

一、這個難點難在哪?

難在這裡匯聚了太多的概念和太多的實現方法,毫不誇張地說,透徹理解了事件,相當於把c#中的核心知識點穿成了串。難度更在於事件的表面行為和背後的實現機制在.net中得到了統一。回想一下從前學到的東西,高階的東西其實都這樣:越高階就越易用,行為和實現的關係越難把握,代價是靈活性;反之,越底層,行為和實現的關係越直接,越靈活。

二、事件的概念是什麼?

事件這個概念並不是.net獨創,如同屬性(properties)一樣,機制由來已久,只是現在已經深刻地融入到.net框架中來,並成為核心機制中不可缺少的一部分。所以我們第一步要做的是:理解事件的一般性定義。在我看到開始對事件作用的描述時,我的腦海裡一下子閃現出來的是資料庫中觸發器(triggers)的概念,這不就是事件嗎?只不過在關聯式資料庫裡用儲存過程作為實現方法而已。客戶向服務端訂閱通知,當服務端完成某項任務時,發出通知訊息到客戶,訊息機制也可以叫非同步響應,似乎和網路又有點相似之處。知識就是這樣貫通的,只要理解了事件的概念,那在什麼地方用都是一樣的。

客戶向服務端訂閱通知,當服務端完成某項任務時,發出通知訊息到客戶(《clr via c#》2nd p226

)三、真正的問題是什麼?

那麼在事件的一般性概念指引下,相信在c#中套用就不會有什麼問題了。但會用從來都不是問題,c#本來就是極為簡單的語法,目的就是為了讓你直接用的。真正的問題是事件的實現,在我讀到這裡的時候,被完全卡住了,讀了幾遍還是一知半解,沒有情緒進入下一章,索性直接跳到第15章,看看託管(delegates)。jr在這一章的第一句話是這樣的:「in this chapter, i talk about callback functions.」接下來的一句又用了「extremely」這樣的詞極盡對這個callback functions的讚美。好吧,我承認我不知道什麼是**函式。

雖然只看了兩句,但我想已經沒有必要再往下看了,還是先了解**函式吧!

cordova學習四 事件Events

deviceready 當cordova完全載入,可以呼叫cordova api介面 支援平台 amazon fire os android blackberry 10 ios tizen windows phone 8 windows 8 pause 支援平台 amazon fire os and...

Events 事件 紅綠燈

event 用於執行緒之間狀態的同步。對全域性變數不斷地做修改。event threading.event 生成1個event的物件 event.wait 等著設定全域性變數。檢測標誌位是否有設定,如果標誌位沒有設定的話,會一直卡在這裡。等待標誌位被設定。如果標誌位被設定了,代表綠燈,直接通行。wa...

docker事件events監控實現分析

使用乙個佇列儲存events事件,先進入到佇列的事件先得到處理 開啟乙個協程,迴圈檢測佇列中是否有事件 佇列事件的寫入必須在另外的協程中,所以必須使用鎖保護佇列events資料 設計 sink 裝載events,為保證設計的相容性,sink設計為inte ce,sink可理解為 運輸船,將event...