文章教程

4.12事件

8/31/2020 9:56:04 PM 人评论 次浏览

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\事件.mp4

事件在编程中很常见,就是触发一个动作后执行的程序,这个执行程序是可以预设的。例如,执行按下按键这个动作之后,可以弹出一个对话框,这个弹出的对话框就是预设的程序。C#中的事件是类和对象对外发出的信息,声明某行为或某处理的条件已经成立。触发事件的对象被称为事件的发送者,捕获并响应事件的对象被称为事件的接收者。

在C#中,使用event关键字声明事件,语法格式如下。

修饰符 even 事件类型 事件名;

在声明事件成员的类中,事件的行为和委托类型的字段及其相似。事件存储对某一个委托的引用,此委托表示已经添加到该事件的事件处理方法中。如果没有添加事件的处理方法,则此事件的值为null。

另外,事件也可以使用访问器的形式来访问,语法格式。

修饰符 even 事件类型 事件名;
{
 add
{
语句块
}
remove
{
语句块
}
}

C#事件使用修饰符的和方法的声明原则相同,事件也分为静态事件、虚事件、密封事件、重写事件和抽象事件。在上述语法格式中的事件类型必须是委托类型,并且此委托类型必须至少具有和事件本身一样的可访问性。

事件和方法具有一样的签名,签名包括名称和对应的参数列表。事件的签名通常使用委托来定义,例如下面的代码。

public delegate void mm(object s,System.EventArgs t);

C#事件的主要特点如下。

  • 事件是类用来通知对象需要执行某种操作的方式。
  • 事件一般在图形操作界面中响应用户的操作。
  • 事件通常使用委托来声明。
  • 事件可以调用匿名方法实现。

在.NET框架的事件签名中,第一个参数通常是触发事件的发送者,第二个参数是第一个传送与事件相关的数据的类。

如果在声明事件时没有采用访问器的方式,编译器将自动提供访问器。

事件可以作为“+=”运算符左边的操作数,它将被用于将事件处理方法添加到所涉及的事件中,或从事件中删除事件的处理方法。

事件功能是由如下3个关联元素实现的。

  • 提供事件数据的类,即类EventNameEventArgs,此类从System.EventArgs中导出。
  • 事件委托,即EventNameEventHandler。
  • 引发事件的类,此类提供事件声明和引发事件的方法。

在现实应用中,通常是调用委托来引发事件,并传递与事件相关的参数。委托将调用已经添加到该事件的所有处理方法。如果没有事件处理方法,则该事件为空。

如果要使用在另外一个类中定义的事件,则必须定义和注册一个事件的处理方法。

每个事件都可以分配多个处理程序来接收事件。这样事件将自动调用每个接收器,无论接收器有几个,引发事件只需调用一次该事件即可。

在C#类中实现事件处理的操作步骤如下。

(1)定义提供事件数据的类。对类EventNameEventArgs进行重命名处理,从System.EventArgs派生后添加所有事件的成员。

(2)声明事件的委托,即对委托EventNameEventHandler进行重命名处理。

(3)使用关键字event在类中定义名为EventName的公共事件成员,并将事件的成员设置为委托类型。

(4)在引发事件的类中定义一个受保护的方法。一般是protected类型的virtual方法。

(5)在引发事件的类中确定引发该事件的事件,即调用OnEventName来引发该事件,然后使用EventNameEventArgs传入事件特定的数据。

如果是在另外一个类中实现事件处理,则具体的实现过程如下。

(1)在使用事件的类中定义一个与事件委托有相同签名的事件处理方法。

(2)使用对该事件处理方法的一个引用创建委托的实例,当调用此委托实例时会自动调用该事件的处理方法。

(3)使用“+=”操作符将该委托实例添加到事件。

(4)如果不需要事件处理,则使用“− =”操作符将该委托从事件队列中删除。

教程类别