利用EventHandler系統委托,觸發Event


               最近一直在研究委托與事件,下面是我的個人理解

  • NOTE:參考了張子陽的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
  • 1.事件要有委托,參數,事件
  • 2.委托可以自己定義:public delegate void  Boli(object sender,BoliEventAgrs e);
  • 也可以利用EventHandler進行操作,本次使用的是此方法:
  • 前提要聲明參數(BoliEventAgrs),此類繼承EventArgs而且是必須的;
    1 class BoliEventAgrs : EventArgs//繼承系統事件參數接口
    2     {
    3         public readonly int tem;
    4         public BoliEventAgrs(int tem)
    5         {
    6             this.tem = tem;
    7         }
    8     }

 

  1. public event EventHandler<BoliEventAgrs> BoliWaterEvent;
  2. EventHandler是系統自己的帶參委托定義為:   public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
  3. BoliEventAgrs為委托參數,也是事件需要的參數;
  4. BoliWaterEvent為事件名字;
  5. 3.委托,參數,事件都有啦,下面就是寫具體方法了,就是你的事件是什么事件,需要干啥的,
  6. 兩步走,訂閱也就是注冊事件,執行觸發事件的方法
//注冊
boli.BoliWaterEvent += boli1.Alarm; boli.BoliWaterEvent += boli1.Alarm1;
//執行
boli.Boliwater();

4。效果

5.下面是完整代碼

using System; namespace DelegateEventObserver { class Program { static void Main(string[] args) { a boli = new a(); b boli1 = new b(); boli.BoliWaterEvent += boli1.Alarm; boli.BoliWaterEvent += boli1.Alarm1; boli.Boliwater(); Console.ReadKey(); } } class BoliEventAgrs : EventArgs//繼承系統事件參數接口
 { public readonly int tem; public BoliEventAgrs(int tem) { this.tem = tem; } } class a { //public delegate void Boli(object sender,BoliEventAgrs e);
        public event EventHandler<BoliEventAgrs> BoliWaterEvent;//BoliEventAgrs 為委托參數
        public void Boliwater() { for (int i=0; i<100;i++) { if (i>90) { BoliEventAgrs e = new BoliEventAgrs(i); if (BoliWaterEvent != null) { BoliWaterEvent(this, e); } } } } } /// <summary>
    /// 委托方法,事件注冊方法,參數e為 控制溫度 /// </summary>
    class b { public void Alarm(object sender,BoliEventAgrs e) { if (e.tem>95) { Console.WriteLine("水溫{0}",e.tem); } } public void Alarm1(object sender, BoliEventAgrs e) { if (e.tem >98) { Console.WriteLine("水溫{0},馬上開啦", e.tem); } } } }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM