事件的声明
public event 委托名 时间名
事件的注册和移除
事件名 += 或 -=
在事件的所有类的外面,只能用以上两个运算符
事件的发生(激发)
事件名(参数列表)
相当于回调所注册的函数
以网络爬虫为例子:
具体的六部曲为
公用的:
声明事件参数类 : class xxxEventArgs{}
声明委托: delegate void xxxEventHandler(obj,args)
在一个类中:
定义事件: public event 类型 名称
发生事件:事件名(参数)
在别的类中:
定义一个方法:void 方法名 (obj,args)
注册一个事件:xxx事件+=new 委托(方法名)
具体的代码为
事件比委托更加的复杂:
可以定义事件存取器
修饰符 event 委托类型名 事件名
{
add{e+=value;
remove{e-=value}} }
总结起来:
事件是一种消息机制
事件源调用事件,别的类注册事件
事件的类型是一个委托
事件的必要性:
我们之前提到过的,很多面向对象的语言中对象有两个基本要素(属性,方法),而C#中则增加了一个要素(属性,方法,事件),这个就涉及到设计模式observer设计模式,是一种一对多的设计模式,当一个对象的状态改变时,其他依赖于它的对象会被自动的告知并更新,是一种松耦合的设计模式,事件和委托的使用感觉就是实现了这种模式,这样类与类之间的划分更加的清晰,安全性高,便于维护,