委托和事件使用的步骤:
1、 定义委托 在发布类中(如果没有自定义EventArgs,那么就不需要定义;如果自定义了EventArgs类,也就是需要用到自己的事件数据,分为2种情况:第一种是不适用泛型类就需要定义委托了,如果是使用泛型类那么就不需要自定义委托了,例如直接是EventHandler<CustomerEventArgs> handler = 事件)。
2、定义事件在发布类中:public event CustomerEventHandler propertyChangedEvent; CustomerEventHandler是 自定义的委托名
3、定义事件动作 在订阅者类中:必须和委托的类型要一致,访问修饰符、返回值类型、参数类型都必须一样,实现某种功能。
4、将事件和事件动作关联在一起,给事件添加方法,使用+=或者-=,这个必须在第5步之前运行。例如:propertyChanged += s.customerHandler;
5、将事件赋给委托 :CutstomerEventHandler handler = propertyChanged;
6、触发事件:就是在某一动作之后该事件发生了,在发生时就需要由委托去执行所关联的事件动作,直接由委托的对象去调用方法。例如:handler(this, e);和委托的类型一样。
protected virtual void onRaiseCustomer(CustomEventArgs e,Subscriber s)
{
propertyChanged += s.customerHandler;
CutstomerEventHandler handler = propertyChanged;
if (handler != null)
{
handler(this, e);
}
}
事件像是委托的封装一样,本来是直接将方法赋给委托,但是会造成一定的不安全,现在是先将方法添加给事件,添加时其实委托是在后面使用add和remove方法添加和移除方法,这个好比是属性和字段的关系,没有危险了再赋给委托,最后由委托去调用这些方法,一个个实现,那么这个事件也就实现了。
事件在其他地方的应用还没有了解。
Question1:事件完成之后,事件中用到的数据在外面取不到吗?
Question2:接口中为何没有事件与事件处理器的关联?
先写这么多,还要补充