程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 事件理解及初識,事件理解初識

事件理解及初識,事件理解初識

編輯:C#入門知識

事件理解及初識,事件理解初識


類或對象可以通過事件向其他類或對象通知發生的相關事情

發行者確定何時引發事件,訂戶確定執行何種操作來響應該事件。

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved