首页 > 学院 > 开发设计 > 正文

事件理解及初识

2019-11-17 02:26:05
字体:
来源:转载
供稿:网友

事件理解及初识

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

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

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());        }    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表