引发事件
2010-10-16 11:34
218 查看
事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。
委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行时提供实现。下面的示例显示了事件委托声明。
public delegate void AlarmEventHandler(Object^ sender, AlarmEventArgs^ e);
该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。
AlarmEventHandler 委托的实例可以绑定到任何一个与其签名匹配的方法上,例如下面的示例中显示的 WakeMeUp 类的 AlarmRang 方法。
public ref class WakeMeUp
{
public:
// AlarmRang has the same signature as AlarmEventHandler.
void AlarmRang(Object^ sender, AlarmEventArgs^ e)
{
//...
}
//...
};
只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System::EventHandler 便足够了。其声明如下。
delegate void EventtHandler(Object^ sender, EventArgs^ e);
事件委托是多路广播的,这意味着它们可以对多个事件处理方法进行引用。有关详细信息,请参见 Delegate。委托考虑了事件处理中的灵活性和精确控制。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。
委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行时提供实现。下面的示例显示了事件委托声明。
public delegate void AlarmEventHandler(Object^ sender, AlarmEventArgs^ e);
该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。
AlarmEventHandler 委托的实例可以绑定到任何一个与其签名匹配的方法上,例如下面的示例中显示的 WakeMeUp 类的 AlarmRang 方法。
public ref class WakeMeUp
{
public:
// AlarmRang has the same signature as AlarmEventHandler.
void AlarmRang(Object^ sender, AlarmEventArgs^ e)
{
//...
}
//...
};
只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System::EventHandler 便足够了。其声明如下。
delegate void EventtHandler(Object^ sender, EventArgs^ e);
事件委托是多路广播的,这意味着它们可以对多个事件处理方法进行引用。有关详细信息,请参见 Delegate。委托考虑了事件处理中的灵活性和精确控制。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。
相关文章推荐
- 公司僵尸帐号引发了一系列的入侵事件-细说密码强度验证的重要性
- 线程安全的方式引发事件
- JQuery 引发两次$(document.ready)事件
- 有道词典鼠标事件引发Ctrl+C键盘事件
- TextBox失去焦点引发服务端事件
- jQuery中on绑定事件后引发的事件冒泡问题如何解决
- SUN事件引发产权担忧 中国开源战略存在风险
- 如何在弹出的窗口中引发父窗口的postback事件
- 【正一专栏】泸县事件的新变化——警惕谣言引发的群体事件
- 在WebGrid中,客户端新增行后,如何在服务端引发行更新事件
- 由于未能找到具有自动生成的控件来引发回发事件,导致发生错误
- 自定义复合控件[2]-引发缓存事件
- TextBox失去焦点也可以引发服务端事件
- 如何在弹出的窗口中引发父窗口的postback事件
- GridViewRow可以任意位置单击引发事件的方法
- .NET Core工程编译事件$(TargetDir)变量为空引发的思考
- remoting 中事件找不到订阅者时引发异常的解决办法
- 如何引发事件
- textbox输入回车引发另一个button的事件
- combobox引发的事件