事件理解及初识

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

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

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

 

posted @ 2015-04-21 11:40  .Net之旅  阅读(456)  评论(1编辑  收藏  举报