每天,我們的身邊都在發生各種各樣的新聞和事件,有讓人不快的事件:跟女朋友分手了,國足又輸了,飛機失事了,海地地震了……也有幸運的事件:考試拿了個高分,申雪趙宏博拿到冠軍了……等等。
什麼是事件?
這個問題曾經讓我十分困擾,在《C#進階編程第6版》中,對事件是這樣說的:事件表示C#中已定義的一個對象,即處理通知過程的對象。可是這樣說未免抽象,對於像我這樣的初學者往往還是難以理解。而我的理解是,事件是處理事件的對象感興趣的,能夠感知或捕獲到一種事物狀態的改變。說白了,事件即改變。哲學上說,事物的運動是永恒的,靜止是相對的。永恒的運動意味著事物本身在發生著改變,所以無時無刻,我們生活的這個世界和宇宙都有無窮的改變在發生,但是,這當中的絕大多數對你來說並不是事件,秘魯總統死了,對秘魯全國所有的人來說或許是一個事件,因為他們關心,可是對課堂正在聽課全然不知的你來說就不是,除非你聽到了這樣一個新聞,開始關注,那麼這個變化對你來說就是一個事件。所以,在這所有的變化中,你能捕獲到的,感興趣的變化,對你來說,就是一個事件。
那麼,把事件這個概念放到程式設計中,又是怎樣的呢?其實是一樣的。同樣的道理,只要機器開著,裡面的硬體和軟體就會發生狀態的改變。可是對你要編寫的代碼來講,並不是所有的這些改變都是事件。你所需要的事件,只是你對這些變化中感興趣的極小一部分。你只需要找到你感興趣的這樣一種狀態的改變,並且能夠捕獲它,就可以利用事件處理模型來完成你想做的事情了。
事件,其實是一個訊息,WINDOWS 系統是訊息驅動的,在C#中稱為事件,C#中處理事件是通過委託完成,必須先理解委託才能更好的理解事件。事件是一個特殊的委託類。
一個事件例如Click事件,要執行的話,本質就是執行一個方法(也就是一個函數),C#是通過定義委託來間接調用方法的,所以,定義事件的時候一定要先定義好委託,我們之所以能直接書寫控制項(例如按鈕)的Click方法,是因為vs已經將這些常用控制項的事件和委託定義好了,所以我們直接寫Click事件的方法就行了。
如果我們自己定義事件,就必須同時定義好這個事件使用的委託,然後書寫委託調用的方法。
註:本文屬於轉載,原文出處http://panjunlai.blog.163.com/blog/static/581903012010420788671/