以下节选自百度百科 “事件驱动”词条
计算机领域的事件驱动
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么 *** 作(即调用什么函数).当然事件不仅限于用困李游户的 *** 作. 事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(汪销如时钟事件等)和来自软件的(如 *** 作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定,因而需要运用虚函数机制(函扰世数名往往取为类似于HandleMsg的一个名字)。对于框架的使用者来说,他们唯一能够看到的是事件处理器。这也是他们所关心的内容。
事件是可以被控件识别的 *** 作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事,等等。事件有系统事件和用户事件。系统事件由系统激发,如时间每隔24小时,银行储户的存款日期增加一天。用虚颤中户事件由用户激发,如用户点击按钮,在文本框中显示特定的文本。事件驱动控件执行某项功能。在.net框架中,事件是将事件发送者(触发事件的对象)与事件接受者(处理事件的方法)相关联的一种代理类,即事件洞拦机制是通过代理类来实现的。当一个事件被触发时,由该事件的代理来通知(调用)处理该事件的相应方法。
C#中事件机制的工作过程如下:
(1)将实际应用中需通过事件机制解决的问题对象注册到相应的事件处理程序上,表示今后当该对象的状态发生变化时,该对象有权使用它注册的事件处理程序。
(2)当事件发生时,触发事件的对象就会调用该对象所有已注册的事件处理程序差山。
C#中事件的定义和使用C#中事件的定义和使用事件的声明和使用与代理有很密切的关系,事件其实是一个或多个方法的代理,当对象的某个状态发生了变化,代理会被自动调用,从而代理的方法就被自动执行。
声明和使用一个事件需要如下步骤:
1.创建一个代理。
2.在类的内部利用event关键字声明事件,并且在类中定义调用事件的方法,也可以定义一个处理事件消息的方法。
声明一个事件的基本形式有两种:
修饰符 event 类型 标识符
修饰符 event 类型 标识符{get{}set{}}
其中:
修饰符是指C#语言的访问修饰符;类型是在声明使用事件扒隐岁的第一步中创建的代理;标识符是一个C#语言的合法标识符,这个标识符被用来在程序中唯一确定声明的事件;在声明事件的第二种形式中具有和类的属性类似的get和set部分,事件的get和set部分意义、使用方法均与属携祥性类似。
3.声明若干个方法与事件关联。将事件同方法进春睁行关联的过程类似于代理对象引用方法的过程。这些方法就是用来处理事件的方法。
4.最后,在程序中使用事件。使用事件需要根据事件的定义或者直接调用事件已经定义好的调用事件的方法,或者通过系统消息来自动触发事件。
下面,给出一个简单的例子来说明事件的声明和使用。
using System
//声明一个代理
public delegate void MyDelegate(object o)
//声明一个类,在类的内部声明事件
public class MyClass
{
//利用上面的代理声明一个事件
public event MyDelegate MyEvent
//定义一个方法调用事件
public void FireAway(object o)
{
if(MyEvent!=null)
{
//调用处理事件的方法
MyEvent(o)
}
}
}
public class MainClass
{
//创建一个处理事件的方法
private static void EventFunction(object o)
{
Console.WriteLine("发生某种事件:",o)
}
//主方法
public static void Main()
{
//声明一个对象
MyClass m = new MyClass()
//将处理事件的方法和事件关联,其形式类似使用多重代理
m.MyEvent += new MyDelegate(EventFunction)
//触发事件
m.FireAway(m)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)