zoukankan      html  css  js  c++  java
  • 事件理解及初识

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

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

    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());
            }
        }
  • 相关阅读:
    tcp 状态转移图详解
    TCP三次握手四次挥手详解
    TCP可靠传输详解
    TCP和UDP的最完整的区别
    Form – 保存自動關閉當前窗口
    Form
    Form
    FORM
    Form 重置记录编号(app_record.for_all_record)
    Oracle Form Developer: Folder FRM-99999 Error 14212
  • 原文地址:https://www.cnblogs.com/JohnnyBao/p/4443973.html
Copyright © 2011-2022 走看看