c#回调浅析(委托、接口回调).doc

c#回调浅析(委托、接口回调).doc

ID:53289429

大小:79.50 KB

页数:4页

时间:2020-04-03

c#回调浅析(委托、接口回调).doc_第1页
c#回调浅析(委托、接口回调).doc_第2页
c#回调浅析(委托、接口回调).doc_第3页
c#回调浅析(委托、接口回调).doc_第4页
资源描述:

《c#回调浅析(委托、接口回调).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C#回调浅析(委托、接口回调)说到c#冋调,通常情况下,指的是某个委托或者接口冋调。现将从网上备位前辈那里学得的一些经验加以整理,形成一个稍全面一些的文章,希望对大家有所帮助!一、委托先看一段代码://定义委托delegatevoidWorkDone();classProgram{staticvoidMain(string[]args){Do();Console.ReadLine();}publicstaticvoidDo(){//首先给callback委托赋值WorkDonecallback=newWorkDone(WorkDoneIIandler);//将callback作为参数W

2、orking(callback);}publicstaticvoidWorking(WorkDonecallBack){//当工作完成的时候执行这个委托callBack();}publicstaticvoidWorkDoneHandler(){Console.WriteLine(DateTime.Now);上面的代码屮,将方法WorkDoneHandler()作为参数,传递给了另一个方法Working(WorkDonecallBack),这样做的好处在于,可以动态的指泄执行哪个方法。比如在Do()方法中,我们指定的callback是WorkDoneHandler当然也可以是其它匹配的方

3、法。而Working0方法根木不需要知道白己最示执行的是哪个Ilancller0二、接口回调通常情况下,我们创建一个对象,并马上肓接去使用它的方法。然而,在有些情况下,希望能在某个场景出现后或条件满足时才调用此对象的方法。冋调就可以解决这个“延迟调用对象方法”的问题。这个被调用方法的对彖称为I川调对象。实现冋调的原理简介如下:首先创建一个冋调对彖,然示再创建一个控制器对象,将冋调对彖需要被调用的方法告诉控制器对象。控制器对象负责检杳某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,白动调用回调对象的方法。以下为C#实现冋调的一个小例子:usingSystem;usingS

4、ystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplicationl{classProgram{staticvoidMain(string[]args){〃创建一个控制器对象,将提供给它的冋调对象传入Controllerobj=newController(newCallBackO);//启动obj.Star();}}publicinterfaceIBack{voidrun();}publicclassCalIBack:IBack{publicvoidrun(){//为了简洁这里只是显示下时间System.Cons

5、ole.WriteLine(DateTime.Now);}}publicclassController{publicIBackCallBackObj=null;//这里引用冋调对象publicController(IBackobj){this.CallBackObj=obj;}publicvoidStar(){Console.WriteLine(/x敲键盘任意键就显示当前的时间,直到按ESC退出…・");while(Console.ReadKey(true).Key!=ConsoleKey.Escape){CallBackObj.run();}}可以看到,当示例程序运行时,何时调用Ca

6、lIBack对象的run()方法是由用户决定的,用户每敲一个键,控制器对象就调用一次CalIBack的mn()方法。这个示例屮实现冋凋的关键在于IBack接口的引入。如果不丿IJIBack接口,而育接使川SllBdck对象,一样可以实现同样的效果,如下:publicclassController{publicCalIBackCallBackObj=null;//冋调对象方法的引用publicController(Cal1Backobj){this.CallBackObj=obj;}publicvoidStar(){Console.WriteLine(”敲键盘任意键就显示当前的时间,直到

7、按ESC退出・..・");while(Console.ReadKey(true).Key!=ConsoleKey.Escape){CallBackObj.run();}}但仔细思考,这样做的结果就使Controller类与CalIBack对彖绑定在…起,力一如果需要调用其他类型的对象,则必须修改Controller类的代码。如果Controller类接收的是一个抽象的接口变量Iback,贝U任何实现了该接口的对象部可以被Controller类对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。