詳解C#事件機制

來源:互聯網
上載者:User

標籤:c# 委託事件機制

        C#中的委託事件機制是這種語言的一大亮點,以一種更加安全和高效的方式可以實作類別似C語言中的函數指標,Qt中的訊號槽機制和委託事件機制在實際運用中頗為相似,但是,C#使用上更加方便。下面,我先貼個圖來展示一個事件機制的原理:

650) this.width=650;" title="引用其它博文" alt="wKiom1S9v22zuZEDAADWSMO5SeA502.jpg" src="http://s3.51cto.com/wyfs02/M00/58/D2/wKiom1S9v22zuZEDAADWSMO5SeA502.jpg" />

        上述Publisher類的作用就是定義委託、定義事件以及定義觸發事件的方法;

        Subscriber類的作用註冊事件,並且定義具體的事件處理方法。(好像Subscriber類不需要註冊事件,註冊事件是在啟動並執行模組進行)

        這種思想本人以為就是:還沒想好怎麼做就先搭個架構(寫個函式宣告),以後那些客戶誰想具體怎麼做,以後他自己想辦法去,我們只把函數簽名聲明好就夠了,免得客戶對我們細緻的定義不滿意。


        【我感覺解釋事件還是有點兒不好理解,我認為理解事件其實就是通過註冊事件將事件和事件處理函數聯絡起來,當事件發生時,我們將我們需要的事件處理函數註冊到該事件中,使得我們滿意的處理過程發生。】

舉個例子(例子是借鑒別人的博文 《C# 事件機制》)

using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace Delegate_And_Event{    public delegate void SalaryComputeEventHander(object sender, MyEventArgs e);    public class Employee    {        public event SalaryComputeEventHander SalaryCompute;        public virtual void OnSalaryCompute(MyEventArgs e) //觸發事件的函數        {            if(SalaryCompute != null)            {                SalaryCompute(this,e);            }        }    }    public class MyEventArgs : EventArgs    {        public readonly double _salary;        public MyEventArgs(double salary)        {            this._salary = salary;        }    }    public class HumanResource    {        //具體的事件處理函數        public void SalaryHandler(object sender, MyEventArgs e)        {            Console.Write("Salary is {0}",e._salary);        }    }    class Program    {        static void Main(string[] args)        {            Employee ep = new Employee ();            HumanResource hr = new HumanResource ();            MyEventArgs e = new MyEventArgs (20000.5);            ep.SalaryCompute += new SalaryComputeEventHander(hr.SalaryHandler);   //將具 體事件處理函數註冊到事件中            while (true)            {                Thread.Sleep(1000);                ep.OnSalaryCompute(e);                               }        }            }}


詳解C#事件機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.