事件理解及初识
类或对象可以通过事件向其他类或对象通知发生的相关事情
发行者确定何时引发事件,订户确定执行何种操作来响应该事件。
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()); } }