介绍
事件是允许类或对象的某些状态发生改变时通知其它类或对象。在(#编程中,在客户端开发中,事件(Event)可以看作是用户的一系列操作,例如按下键盘的某个按键、单击界面上一个按钮或选择某个选项等,当事件发生时我们可以针对事件做出一系列的响应,例如显示一个界面、退出程序、记录日志等等。
事件需要在一个类中声明和触发,并通过委托与事件处理程序关联。
事件可以分为发布器和订阅器两个部分:
发布器类 是一个包含件和委托的类,事件和委托之同的联系也定义在这个类中,发布需类的对象可以触发事件,并使用委托通知其他的对象。
订阅器类 则是一个接收事件并提供事件处理程序的类,发布器类中的委托调用订阅器类中的方法(事件处理程序)。
有关事件我们需要注意:
- 发布器才能触发事件,订阅器决定对事件作出何种响应;
- 一个事件可以拥有多个订阅器,同时订阅器也可以处理来自多个发布器的事件;
- 没有订阅器的事件永远也不会触发;
- 事件通常用于定义针对用户的操作,例如单击某个按钮;
- 如果事件拥有多个订阅器,当事件被触发时会同步调用所有的事件处理程序:
- 在.NET类库中,事件基于 EventHandler委托和 EventArgs 基类。
声明事件
1.如果在一个类RecordClass中声明一个事件,首先需要该类中为该事件声明一个委托类型
public delegate void RecordHandler(object sender,RecordArgs e);//声明类托
//事件参数类
public class RecordArgs :EventArgs
{
public RecordInfo Record { get;set;}
public RecordArgs(RecordInfo r)
{
Record = r;
}
}
其中RecordHandler是委托名,RecordArgs 是自定义事件参数类
2.然后使用event关键字声明事件。
public event RecordHandler Recorded; //声明事件Recoreded
调用事件
在发布器类中提供触发事件的方法
public void onRecorded()
{
if(Recorded!=null)
{
RecordArgs arg=new RecordArgs(record);
Recorded(this,arg);//触发事件
}
}
订阅事件
在订阅器类RecordListClass中订阅事件,并提供事件相关的处理方法(事件处理程序),并与事件关联
public void AddRecord()
{
Recordclass recordclass=new Recordclass();
recordclass.Recorded+=Recordclass Recorded;//订阅事件
rrecordclass.showPage();
}
//事件处理程序
private void Recordclass Recorded(object sender,RecordArgs e)
{
RecordInfo re=e.Reocrd;
if(re!=null)
{
recordList.Add(re);
PrintList();
}
}