• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

技术天地

C#实现接口回调

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/2018/1016/88.html

通常情况下,我们创建一个对象,并马上直接去使用它的方法。然而,我们常州网站开发建设培训在有些情况下,希望能在某个场景出现后或条件满足时才调用此对象的方法。回调就可以解决这个延迟调用对象方法的问题。这个被调用方法的对象称为回调对象。

 

实现回调的原理如下:

首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法。

 

以下为C#实现回调的一个小例子。

using System; 

using System.Collections.Generic; 

using System.Text; 

namespace ConsoleApplication1 

 

     class Program 

      

         static void Main(string[] args) 

          

             //创建一个控制器对象,将提供给它的回调对象传入 

             Controller obj = new Controller(new CallBack()); 

             //启动 

             obj.Star(); 

          

      

     public interface IBack 

      

         void run(); 

      

     public class CallBack : IBack 

      

         public void run() 

          

             //为了简洁这里只是显示下时间 

             System.Console.WriteLine(DateTime.Now); 

          

      

     public class Controller 

      

         public IBack CallBackObj = null;   //这里引用回调对象 

         public Controller(IBack obj) 

          

             this.CallBackObj = obj; 

          

         public void Star() 

          

             Console.WriteLine("敲键盘任意键就显示当前的时间,直到按ESC退出...."); 

             while (Console.ReadKey(true).Key != ConsoleKey.Escape) 

              

                 CallBackObj.run(); 

              

          

      

 

 

可以看到,当示例程序运行时,何时调用CallBack对象的run()方法是由用户决定的,用户每敲一个键,控制器对象就调用一次CallBackrun()方法。这个示例中实现回凋的关键在于IBack接口的引入。

 

如果不用IBack接口,而直接使用 CallBack对象,一样可以实现同样的效果,如下:

public class Controller 

 

   public CallBack CallBackObj = null;   //回调对象方法的引用 

   public Controller(CallBack obj) 

    

       this.CallBackObj = obj; 

    

   public void Star() 

    

       Console.WriteLine("敲键盘任意键就显示当前的时间,直到按ESC退出...."); 

       while (Console.ReadKey(true).Key != ConsoleKey.Escape) 

        

           CallBackObj.run(); 

        

    

 

 

但仔细思考,这样做的结果就使Controller类与CallBack对象绑定在一起,万一如果需要调用其他类型的对象,则必须修改Controller类的代码。

 

如果Controller类接收的是一个抽象的接口变量IBack,则任何实现了该接口的对象都可以被Controller类对象所回调,Controller类的代码就再不用被修改,保证了代码对环境的适应性,在我们常州手游App开发培训看来无疑是一个很好的解决方案。



上篇:上一篇:socket C#与Delphi互传结构体
下篇:下一篇:Delphi动态地使用SQL查询