如何在类中编写事件
如何在类中编写事件
事件也是类的一种基本成员,它提供了这个类的对象与其他类对象的交互的能力。
作为产生事件的类,它需要向外暴露事件
这需要以下几步:
(1)声明一个委托,它定义了要注册本事件的用户在注册本事件是需要激发的方法
public delegate void CurrentChangedEventHandler(object sender, CurrentChangedEventArgs e);
(2)声明事件成员,即上面定义的委托类型的事件
public event CurrentChangedEventHandler CurrentChanged;
这句不太正常的语句其实会被编译器翻译成下面的几句话:
a、一个私有的委托类型变量
private CurrentChangedEventHandler CurrentChanged;
b、一个允许注册对象方法
c、一个允许删除对象方法
这样也就很好理解界面端怎么注册对一个事件的关注了。界面通过+=和-=从委托链上添加和删除,也可以通过调用方法将委托添加和删除,界面的需要被委托的方法的参数列表必须和数据层声明的委托的参数列表完全相同。数据层通过促发事件(这个东西的写法就是事件的名字,加上委托的参数列表)向注册这个事件的用户发送消息,因为事件的形式如此msgName(Object sender,EventArgs e),所以客户端就可以接收到这两个参数,通常数据层会构建EventArgs的子类,在子类中构造要向界面传送的数据。这样界面通过解析e中的数据就能得到数据层的操作结果了。
事件也是类的一种基本成员,它提供了这个类的对象与其他类对象的交互的能力。
作为产生事件的类,它需要向外暴露事件
这需要以下几步:
(1)声明一个委托,它定义了要注册本事件的用户在注册本事件是需要激发的方法
public delegate void CurrentChangedEventHandler(object sender, CurrentChangedEventArgs e);
(2)声明事件成员,即上面定义的委托类型的事件
public event CurrentChangedEventHandler CurrentChanged;
这句不太正常的语句其实会被编译器翻译成下面的几句话:
a、一个私有的委托类型变量
private CurrentChangedEventHandler CurrentChanged;
b、一个允许注册对象方法
c、一个允许删除对象方法
这样也就很好理解界面端怎么注册对一个事件的关注了。界面通过+=和-=从委托链上添加和删除,也可以通过调用方法将委托添加和删除,界面的需要被委托的方法的参数列表必须和数据层声明的委托的参数列表完全相同。数据层通过促发事件(这个东西的写法就是事件的名字,加上委托的参数列表)向注册这个事件的用户发送消息,因为事件的形式如此msgName(Object sender,EventArgs e),所以客户端就可以接收到这两个参数,通常数据层会构建EventArgs的子类,在子类中构造要向界面传送的数据。这样界面通过解析e中的数据就能得到数据层的操作结果了。