在应用程序中使用事件,必须提供一个事件处理方法,该处理方法执行程序逻辑以响应事件,并向事件源注册事件处理方法,该过程称为事件连接。
创建和使用事件的步骤:
分为五步:
第一步:在事件源类的声明中为事件创建一个委托类型和声明事件。
delegate void 委托类型名 ([引发事件的对象名,事件参数]);
[修饰符] event 委托类型名 事件名;
声明委托类型:public delegate void delegateType();
声明一个上课事件:public event delegateType ClassEvent;
第二步:在订阅者类中创建事件处理方法
(订阅这类或单独类中)
public void Listener()
{ Console.WriteLine(" 学生" + sname + "正在认真听课"); }
public void Record()
{ Console.WriteLine(" 学生" + sname + "正在做笔记"); }
public void Reading()
{ Console.WriteLine(" 学生" + sname + "正在认真做笔记"); }
第三步:订阅事件
向事件源类的事件中添加事件处理方法中的一个委托,这个过程称为订阅事件。
t.ClassEvent += new Teacher.delegateType(s1.Listener);
第四步:创建引发事件的方法
引发事件与引用方法相似,通常在事件源中包含引发事件的方法
(在Teacher类中)
public void Start()//定义引发事件的方法
{
if (ClassEvent != null) ClassEvent();
}
第五步:引发事件
t.Start();
//t 事件源对象
//Start 引发事件的方法
完整版:
using System;
namespace DelegateEvent
{
public class Teacher//发布者教师类
{
private string tname;
public delegate void delegateType();
public event delegateType ClassEvent;//声明一个上课事件
public Teacher(string name)//有参构造函数
{ this.tname = name; }
public void Start()//定义引发事件的方法
{
Console.WriteLine(tname + " 教师宣布开始上课:");
if (ClassEvent != null) ClassEvent();
}
}
public class Student//订阅者学生类
{
private string sname;
public Student(string name)
{ this.sname = name; }
//事件处理方法`在这里插入代码片`
public void Listener()
{ Console.WriteLine(" 学生" + sname + "正在认真听课"); }
public void Record()
{ Console.WriteLine(" 学生" + sname + "正在做笔记"); }
public void Reading()
{ Console.WriteLine(" 学生" + sname + "正在认真做笔记"); }
}
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher("A");
Student s1 = new Student("B");
Student s2 = new Student("C");
Student s3 = new Student("D");
//以下是3个学生订阅一个事件
t.ClassEvent += new Teacher.delegateType(s1.Listener);
t.ClassEvent += new Teacher.delegateType(s2.Reading);
t.ClassEvent += new Teacher.delegateType(s3.Record);
t.Start();//引发事件
}
}
}
结果:
A教师宣布开始上课
B正在认真听课
C正在认真看书
D正在做笔记