事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.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。委托考虑了事件处理中的灵活性和精确控制。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。
分享到:
相关推荐
VB 2010 (18)从子类中引发事件。 子类可以访问其基类中的事件,但子类中的代码不能引发该事件。可以在基类中实现一个Protected方法,允许任何派生类引发该方法。
如何在非COM类中引发事件
主要为大家详细介绍了C#自定义事件之属性改变引发事件示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
导弹系统安全性分析中的引发事件鉴别方法
public static void Rise() //引发事件的函数成员 { Console.WriteLine("太阳从东方升起..."); if (OnRise != null) OnRise(null, null); //引发事件OnRise } } (3)在程序中新建一个公鸡类Cock,在其中定义...
MultiFuncListView:1,实现上拉加载刷新刷新的XListView,改写了网上流行的XListView,做了很多优化;... 3 ,实现带粘性标题头的StikkeyListView,作者自己实现的ListView,在集成三种特效时解决引发事件冲突的问题
这可以在 gerrit 事件流的更改中触发最新补丁patchset-created事件。 Trigger按钮被添加到修订视图。 此插件适用于 Gerrit 2.8 或更高版本。 环境 linux java-1.7 gradle 建造 使用 maven 构建插件。 ./gradlew...
对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。
EventInterceptor 是一个 CComponent,每当观察到的组件引发事件时,它就会引发 onEventIntercepted 事件。 onEventIntercepted 事件包含被拦截事件的名称,以及被拦截事件本身。 它主要是作为其他组件的工具,可以...
使用该库,您可以通过将属性更改映射到自己的事件类来捕获这些事件。 安装 composer require jpkleemans/attribute-events 如何使用它 在模型中使用Kleemans\AttributeEvents特性,然后将属性添加到$...
在编写大型应用软件时,只需编写出若干小程序段,每个小程序段面向不同的对象,由用户的操作来引发事件驱动,执行相应的小程序段,完成指定的操作。 另外,Visual Basic还提供了对象的链接与嵌入(OLE)和访问数据库...
详细介绍事件如何定义。委托声明,事件声明,触发事件方法。引发事件方法
类或对象可以通过事件向其他... 发行者确定何时引发事件,订户确定执行何种操作来响应该事件。 一个事件可以有多个订户。一个订户可处理来自多个发行者的多个事件。 没有订户的事件永远也不会引发。 事件通常用于通
对于单个事件行 为,通常系统日志主要包括:事件发生的日期及时间、引发事件的用 户 IP 地址、事件源及目的地位置、事件类型等。 安全审计的记录机制 对于各种网络系统应采用不同的记录日志机制。日志的记录方式 有 ...
引发事件的对象叫做事件发送方,捕获事件并对其做出响应的对象叫做事件接收方。但是事件发送方并不知道哪个对象或者方法会处理它引发的事件,所以需要在事件发送方和事件接收方之间存在一媒介,明确某个对象或者某个...
当用户在客服会话发送消息(或进行某些特定的用户操作引发的事件推送时),微信服务器会将消息(或事件 ... 1、客服消息功能概述 在页面中使用 <contact> 可以显示进入客服会话按钮。 当用户在客服会话发送...
c#自定义事件分为六步,声明关于事件的委托,声明事件,编写引发事件的函数,事件处理,这里我们就来具体的介绍一下。 C#自定义事件的具体实现步骤如下: 1、声明一个delegate: (用于事件的类型的定义) 如: 代码如下...
(18) 引发事件 (19) 深入了解事件Event (20) 观察者模式 (21) Obseve模式结构 (22) Observer 示例程序演示 (23) Observer 与事件 (24) 自定义控件和用户控件C#控件 (25) 事件驱动开发使用 (26...
课堂突发事件引发的思索.pdf