C#事件DEMO

來源:互聯網
上載者:User
舉個簡單的流程1.先定義一個委託,不過很多時候不需要,可以直接使用系統的。public delegate void SampleEventHandler(object sender, SampleEventArgs e);2.在類中定義事件。public event SampleEventHandler SampleEvent;要瞭解深刻一點,你可以查看一下多播委託(Multicast Delegate)3.執行事件:private OnSampleEventHandler(object sender, SampleEventArgs e) {    if (SampleEvent != null) {        SampleEvent(sender, e);    }}外部:4.載入事件:xxx.SampleEvent += this.xxx_OnSampleEventHandler;5.定義事件發生時執行的方法protected void xxx_OnSampleEventHandler(object sender, SampleEventArgs e) { ... }
View Code

        private void Form1_Load(object sender, EventArgs e)        {            Publisher pub = new Publisher();            Receiver rec = new Receiver();            pub.delegtevent += new DelegteEvent(rec.ReceiverHandler);  //註冊            pub.FireEvent();//觸發事件            Console.Read();        }    }    //聲明代理    public delegate void DelegteEvent(object sender,MyEventArgs e); //聲明一個代理類                   public class Publisher    {        //定義事件        public event DelegteEvent delegtevent;        //事件觸發的方法        public virtual void FireEvent(MyEventArgs e)        {            if (delegtevent != null)                //調用委託觸發事件                delegtevent(this,e);            }    }       public class Receiver    {        //事件處理函數        public void ReceiverHandler(object sender,MyEventArgs e)        {            Console.WriteLine("ReceiverHandler is {0}",e._salary);        }    }    public class MyEventArgs : EventArgs         //定義事件參數類    {        public readonly double _salary;        public MyEventArgs(double salary)        {            this._salary = salary;        }    }

案例

View Code

   using System; using System.Collections.Generic; using System.Text;namespace Delegate {        // 熱水器        public class Heater {               private int temperature;               public string type = "RealFire 001";              // 添加型號作為示範               public string area = "China Xian";                     // 添加產地作為示範               //聲明委託               public delegate void BoiledEventHandler(Object sender, BoliedEventArgs e);               public event BoiledEventHandler Boiled;       //聲明事件              // 定義BoliedEventArgs類,傳遞給Observer所感興趣的資訊               public class BoliedEventArgs : EventArgs                {                      public readonly int temperature;                      public BoliedEventArgs(int temperature)                      {                             this.temperature = temperature;                      }               }              // 可以供繼承自 Heater 的類重寫,以便繼承類拒絕其他對象對它的監視               protected virtual void OnBolied(BoliedEventArgs e)               {                      if (Boiled != null)                       {       // 如果有對象註冊                             Boiled(this, e);       // 調用所有註冊對象的方法                      }               }                             // 燒水。               public void BoilWater()                {                      for (int i = 0; i <= 100; i++)                              temperature = i;                             if (temperature > 95)                             {                                    //建立BoliedEventArgs 對象。                                    BoliedEventArgs e = new BoliedEventArgs(temperature);                                    OnBolied(e);       // 調用 OnBolied方法                             }                      }               }        }       // 警報器        public class Alarm        {               public void MakeAlert(Object sender, Heater.BoliedEventArgs e)                               {                      Heater heater = (Heater)sender;              //這裡是不是很熟悉呢?                      //訪問 sender 中的公用欄位                      Console.WriteLine("Alarm:{0} - {1}: ", heater.area, heater.type);                      Console.WriteLine("Alarm: 嘀嘀嘀,水已經 {0} 度了:", e.temperature);                      Console.WriteLine();               }       }       // 顯示器        public class Display         {               public static void ShowMsg(Object sender, Heater.BoliedEventArgs e)               {                 //靜態方法                      Heater heater = (Heater)sender;                      Console.WriteLine("Display:{0} - {1}: ", heater.area, heater.type);                      Console.WriteLine("Display:水快燒開了,當前溫度:{0}度。", e.temperature);                      Console.WriteLine();               }        }       class Program {               static void Main() {                      Heater heater = new Heater();                      Alarm alarm = new Alarm();                     heater.Boiled += alarm.MakeAlert;       //註冊方法                      heater.Boiled += (new Alarm()).MakeAlert;              //給匿名對象註冊方法                      heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);       //也可以這麼註冊                      heater.Boiled += Display.ShowMsg;              //註冊靜態方法                     heater.BoilWater();       //燒水,會自動調用註冊過對象的方法               }        }}

 

 總結

View Code

1, //聲明委託 public delegate void MyEventHandler(Object sender, MyEventArgs e);2,//聲明事件public event MyEventHandler MyEvent;3,// 定義MyEventArgs類,傳遞給Observer所感興趣的資訊public class MyEventArgs : EventArgs                {                      public readonly int interestFiles;                      public BoliedEventArgs(int interestFiles)                      {                             this.interestFiles = interestFiles;                      }               }4,// 可以供繼承類重寫,以便繼承類拒絕其他對象對它的監視               protected virtual void MyEvent (MyEventArgs e)               {                      if (MyEvent!= null)                       {                         // 如果有對象註冊                             MyEvent (this, e);                                // 調用所有註冊對象的方法                      }               }5,               // 聲明觸發事件的方法。               public void tiggerMethod()                {                      for (int i = 0; i <= 100; i++)                              interestFiles = i;                             if (interestFiles > 95) {                                //建立BoliedEventArgs 對象。                               MyEventArgs e = new MyEventArgs(interestFiles);// 調用 MyEvent方法                                 MyEvent(e);                                   }                      }               }

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.