2017-04-17 50 views
0

我經歷了Vb.net中的事件,我發現它們確實是一個了不起的功能..但仍然對如何有效地使用它們感到困惑。子功能vs事件,有什麼區別?

真正的疑問是,功能和子可能是事件的有效替代。無論我如何處理事件,我都可以通過功能和方法來實現。凡有Raisevent的地方,我都可以用一個函數或程序代替它。那麼,事件的真正好處是什麼,在哪些情況下我可以使用它們而不是函數和過程?

+2

事件用於分離對象。如果您處理一個事件,則持有該事件的對象不知道*誰*訂閱了該事件。它只是獲得一個「指針」,當它觸發事件時它會調用它的方法。這允許不同的對象與其他對象進行通信而不知道其他對象的任何實現細節。唯一已知的是公共接口,在這種情況下是事件和事件處理程序。 –

回答

1

讓我們來看看你是否通過一個例子來理解它。你有Button控件。它定義了很多事件(Click,MouseDown,Keypress ...)。當您在Form中放置按鈕時,您決定在那裏要管理什麼事件。所以在表單中,當點擊按鈕或者沒有做任何事情時,你可以做些事情。

試想一下,如果這是與普通方法進行。在這種情況下,該按鈕應該有一個對該按鈕所在表單的引用,並且表單應該有一個方法,是否使用該方法。

事件驅動編程讓人很容易界定一些事件時,東西一類恰好信號,是創建實例決定是否該事件是相關或不一個班級。

0

感謝你澄清,我得到了點。我忽略了一點是:事件在同一類解僱,但執行是在不同類完成。

我的意思是,當我定義一個類,我可以把某個地方的RaiseEvent認識到一些東西,但我與不同類別的子事件相關聯。

所以,在這樣一類被稱爲錢包,我可以把如下語句:

If Dollars > 5 Then 
     RaiseEvent Above5() 
    End If 

,並呼籲這樣不同的類AllWallet:

Dim WithEvents myWallet as new Wallet 
Sub myWallet_Above5() Handles myWallet.Above5 
    MsgBox("Dollars are more than 5") 
End Sub 

否則,我的意思是,如果事件被解僱它們被定義在同一個類中,子和函數可以替代事件。

感謝所有

+0

一個類不應該處理它自己的事件。事件通常用於在課堂外通知事件發生,如你的例子。問題是,當一個班級提出一個事件時,它不知道該事件的用戶會做什麼,也不應該關心。 –

相關問題