你的位置:首页 > ASP.net教程

[ASP.net教程]事件理解及初识


类或对象可以通过事件向其他类或对象通知发生的相关事情

发行者确定何时引发事件,订户确定执行何种操作来响应该事件。

C#中的事件处理实际上是一种具有特殊签名的delegate

假设一个场景 :老师登记分数后,学生马上接收到分数

发布者首先要写的代码

1、定义一个委托和事件,写一个方法,当这个方法调用时触发事件通知订阅者

 public class Teacher  {    public delegate void TellScoreEventHandler(object sender, ScoreEventArgs e);    public event TellScoreEventHandler tellScoreEvent;        /// <summary>    /// 通知订阅者事件发生    /// </summary>    /// <param name="e"></param>    public void OnTellScore(ScoreEventArgs e)    {      if (tellScoreEvent != null)        tellScoreEvent(this, e);    }    /// <summary>    /// 调用方法时,触发事件    /// </summary>    /// <param name="name"></param>    /// <param name="score"></param>    public void TellStudentSocre(string name,int score)    {      ScoreEventArgs scoreArgs = new ScoreEventArgs(name, score);      OnTellScore(scoreArgs);    }  }  /// <summary>  /// 自定义事件数据的类  /// </summary>  public class ScoreEventArgs : EventArgs  {    public int Score { get; set; }    public string Name { get; set; }    public ScoreEventArgs(string name,int score)    {      this.Name = name;      this.Score = score;    }  }

2、先添加一个订阅者,后调用发布者中能触发事件的方法

Student stu = new Student();      Teacher teacher = new Teacher();      teacher.tellScoreEvent += new Teacher.TellScoreEventHandler(stu.teacher_tellScoreEvent);      teacher.TellStudentSocre("奋斗的QB", 100);

3、在订阅者里处理,当事件发生时,如何处理

 public class Student  {//当事件发生后,如何处理    public void teacher_tellScoreEvent(object sender, ScoreEventArgs e)    {      MessageBox.Show(e.Name + "考了" + e.Score.ToString());    }  }