关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

用C#代码实现接口回调

发布时间:2019-12-04 17:50:51

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

以下为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()方法是由用户决定的,用户每敲一个键,控制器对象就调用一次CallBack的run()方法。这个示例中实现回凋的关键在于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(); 

       } 

   } 



/template/Home/Zkeys/PC/Static