详解C#事件机制
C#中的委托事件机制是这种语言的一大亮点,以一种更加安全和高效的方式可以实现类似C语言中的函数指针,Qt中的信号槽机制和委托事件机制在实际运用中颇为相似,但是,C#使用上更加方便。下面,我先贴个图来展示一个事件机制的原理:
上述Publisher类的作用就是定义委托、定义事件以及定义触发事件的方法;
Subscriber类的作用注册事件,并且定义具体的事件处理方法。(好像Subscriber类不需要注册事件,注册事件是在运行的模块进行)
这种思想本人以为就是:还没想好怎么做就先搭个框架(写个函数声明),以后那些客户谁想具体怎么做,以后他自己想办法去,我们只把函数签名声明好就够了,免得客户对我们细致的定义不满意。
【上图我感觉解释事件还是有点儿不好理解,我认为理解事件其实就是通过注册事件将事件和事件处理函数联系起来,当事件发生时,我们将我们需要的事件处理函数注册到该事件中,使得我们满意的处理过程发生。】
举个例子(例子是借鉴别人的博文 《C# 事件机制》)
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Threading;namespaceDelegate_And_Event{publicdelegatevoidSalaryComputeEventHander(objectsender,MyEventArgse);publicclassEmployee{publiceventSalaryComputeEventHanderSalaryCompute;publicvirtualvoidOnSalaryCompute(MyEventArgse)//触发事件的函数{if(SalaryCompute!=null){SalaryCompute(this,e);}}}publicclassMyEventArgs:EventArgs{publicreadonlydouble_salary;publicMyEventArgs(doublesalary){this._salary=salary;}}publicclassHumanResource{//具体的事件处理函数publicvoidSalaryHandler(objectsender,MyEventArgse){Console.Write("Salaryis{0}",e._salary);}}classProgram{staticvoidMain(string[]args){Employeeep=newEmployee();HumanResourcehr=newHumanResource();MyEventArgse=newMyEventArgs(20000.5);ep.SalaryCompute+=newSalaryComputeEventHander(hr.SalaryHandler);//将具体事件处理函数注册到事件中while(true){Thread.Sleep(1000);ep.OnSalaryCompute(e);}}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。