您好,登錄后才能下訂單哦!
C#中的委托事件機(jī)制是這種語言的一大亮點(diǎn),以一種更加安全和高效的方式可以實(shí)現(xiàn)類似C語言中的函數(shù)指針,Qt中的信號槽機(jī)制和委托事件機(jī)制在實(shí)際運(yùn)用中頗為相似,但是,C#使用上更加方便。下面,我先貼個圖來展示一個事件機(jī)制的原理:
上述Publisher類的作用就是定義委托、定義事件以及定義觸發(fā)事件的方法;
Subscriber類的作用注冊事件,并且定義具體的事件處理方法。(好像Subscriber類不需要注冊事件,注冊事件是在運(yùn)行的模塊進(jìn)行)
這種思想本人以為就是:還沒想好怎么做就先搭個框架(寫個函數(shù)聲明),以后那些客戶誰想具體怎么做,以后他自己想辦法去,我們只把函數(shù)簽名聲明好就夠了,免得客戶對我們細(xì)致的定義不滿意。
【上圖我感覺解釋事件還是有點(diǎn)兒不好理解,我認(rèn)為理解事件其實(shí)就是通過注冊事件將事件和事件處理函數(shù)聯(lián)系起來,當(dāng)事件發(fā)生時,我們將我們需要的事件處理函數(shù)注冊到該事件中,使得我們滿意的處理過程發(fā)生?!?br />
舉個例子(例子是借鑒別人的博文 《C# 事件機(jī)制》)
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) //觸發(fā)事件的函數(shù) { if(SalaryCompute != null) { SalaryCompute(this,e); } } } public class MyEventArgs : EventArgs { public readonly double _salary; public MyEventArgs(double salary) { this._salary = salary; } } public class HumanResource { //具體的事件處理函數(shù) 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); //將具 體事件處理函數(shù)注冊到事件中 while (true) { Thread.Sleep(1000); ep.OnSalaryCompute(e); } } } }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。