2017-04-17 48 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

一个类不应该处理它自己的事件。事件通常用于在课堂外通知事件发生,如你的例子。问题是,当一个班级提出一个事件时,它不知道该事件的用户会做什么,也不应该关心。 –

相关问题