讲过了委托,不得不讲事件。
事件基于委托,为委托提供了一种发布/订阅机制。
在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。
在典型的 C# Windows 窗体或 Web 应用程序中,可订阅由控件(如按钮和列表框)引发的事件。可使用 Visual C# 集成开发环境 (IDE) 来浏览控件发布的事件,选择要处理的事件。IDE 会自动添加空事件处理程序方法和订阅事件的代码。
事件时对委托的封装。
事件帮助解决委托封装问题。事件位于委托的顶部,并提供封装,使得目标源只能听而不能完全控制的委托对象。
下图显示了事件的样子: -
理解事件:
Button是一个类,当你点击按钮的时候,Click事件被触发。
定时器是一个类,每毫秒tick事件被触发。
下面通过一个例子来讲述一下事件的应用。
定义两个类CarDealer和Consumer。CarDealer类提供了一个新车到达时触发的事件,Consumer类订阅该事件,以获得新车到达的通知。
事件发布程序:
CarDealer类提供了EventHandler类型的NewCarInfo事件。事件一般使用带两个参数的方法。第一个参数是一个对象,包含事件的发送者;第二个参数提供了事件的相关信息。
你可能感到吃惊,没有定义委托怎么就定义事件了??
其实有了泛型委托EventHandler 委托后,就不再需要委托了。
EventHandler 的语法如下:
public delegate void EventHandler(Object sender,TEventArgs e) where