第6章 面向对程序设计.pptVIP

  • 1
  • 0
  • 约2.12万字
  • 约 83页
  • 2019-01-23 发布于江苏
  • 举报
第6章 面向对程序设计

事件是事件源类的成员。在事件源类中以关键字event声明一个事件,其一般语法格式如下: [修饰符] event 委托类型名 事件名; 其中,“修饰符”指出类的用户访问事件的方式,可以为public、private、protected、internal、protectedinternal、static或virtual等。 例如,在Teacher类包含以下语句声明一个上课事件: public event delegateType ClassEvent; //声明一个上课事件 2. 创建事件处理的方法 当事件触发时需要调用事件处理方法,需设计相应的事件处理方法。既可以将事件处理方法放在订阅者类中,也可以将将事件处理方法放在单独的类中。 例如在课堂讲课例子中,设计订阅者类为学生类Student,在该类中设计以下3个事件处理方法: public void Listener() //听课方法 { Console.WriteLine( 学生 + sname + 正在认真听课); } public void Record() //做笔记方法 { Console.WriteLine( 学生 + sname + 正在做笔记); } public void Reading() //看书方法 { Console.WriteLine( 学生 + sname + 正在认真看书); } 3. 订阅事件 向事件源类的事件中添加事件处理方法中的一个委托,这个过程称为订阅事件,这个过程通常是在主程序中进行的,首先必须定义一个包含事件的类的对象,然后将事件处理方法和该对象关联起来,其格式如下: 事件类对象名.事件名+=new 委托类型名(事件处理方法); 其中,还可以使用“-=”、“+”、“-”等运算符添加或删除事件处理方法。 例如,以下语句是订阅者s1.Listener(其中s1是Student类对象)向事件源t(Teacher类对象)订阅ClassEvent事件,其中事件处理方法是Student类的Listener方法: t.ClassEvent += new Teacher.delegateType(s1.Listener); 4. 创建引发事件的方法 要通知订阅了某个事件的所有对象,需要引发该事件,引发事件与调用方法相似,其语法格式如下: 事件名([参数表]); 通常在事件源中包含引发事件的方法,例如,在Teacher类中包含以下方法: public void Start() //定义引发事件的方法 { Console.WriteLine(tname+教师宣布开始上课:); if (ClassEvent != null) ClassEvent(); //当事件不空时引发该事件 } 5. 确定引发该事件的时间 在需要的时候调用引发事件的方法来触发事件。例如,以下语句触发事件: t.Start(); 其中t为事件源对象,Start()为引发事件的方法。 using System; using System.Collections; namespace aaa {   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;

文档评论(0)

1亿VIP精品文档

相关文档