我不完全理解应该使用事件,因此我相信我的工具包存在很大差距。我三年前从一家公司开始,并没有一个.NET宣布单一事件。
我已经阅读了大量有关该主题的文献,例如:在这里:http://bytes.com/topic/visual-basic-net/answers/381790-why-use-events和When to use events?,我可以使用它们。但是,我不明白何时应该使用它们。
我意识到事件遵循Observer模式,而Observer模式有助于松散耦合的代码。我正在寻找一个事件的商业例子。我正在寻找解释而不是代码。
我注意到以下Observer示例不使用事件:http://www.dofactory.com/Patterns/Patterns.aspx。
答案 0 :(得分:4)
事件有用的一个很好的例子是,如果你有一个托管在.aspx页面内的用户控件。
让我假装我有一个用户控件来显示一个人的详细信息。用户控件具有与人相关的字段,例如姓名,年龄,性别等。该用户控件可以托管在多个页面中(即Page1.aspx,Page2.aspx等)。在用户控件的底部是一个保存按钮,当单击该按钮时,我想在.aspx页面顶部显示一条消息,上面写着“人员已成功更新”的内容。
如果没有事件,用户控件将需要知道哪个页面托管它,以便它可以告诉页面需要更新标签的文本以显示在页面顶部。如果您只想在这一页上使用用户控件,这可以正常工作,这称为紧耦合。现在,如果我想在另一个.aspx页面上使用用户控件,该怎么办?哦,“人员成功更新”消息是硬连接到“旧”页面并且不起作用。
输入活动。在用户控件中,我可以定义一个事件,该事件可以由用户控件在适当的时间引发,在本例中是单击保存按钮的情况。
同时回到.aspx页面,它需要一种方式来说我希望被告知用户控件引发的事件,因此它通过它对用户控件本身的引用来订阅用户控件的事件。现在,当用户控件引发事件时,页面会做出反应并执行所需的任何操作。使用此用户控件的任何页面都可以选择订阅或忽略用户控件引发的事件,并可以根据引发的事件执行不同的逻辑。例如,另一个页面可以显示消息,并记录信息的成功更新。
简而言之,事件提供了一条信息管道,可以将信息从一个组件(用户控件)传递到另一个组件(页面),而双方都不需要知道彼此的存在。这允许用户控件独立于.aspx页面,但如果它(页面)选择关心该信息,则仍然能够向其提供信息。