美文网首页
C#实现接口回调

C#实现接口回调

作者: 没伞的小孩 | 来源:发表于2018-06-28 17:48 被阅读0次

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

  • 实现回调的原理简介如下:

首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象.控制器对象负责检查某个场景是否出现或某个条件是否满足.当此场景出现或此条件满足时,自动调用回调对象的方法.
以下为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传给当前类中的引用的对象。
             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(); 
       } 
   } 
} 

但仔细思考,这样做的结果就使Controller类与CallBack对象绑定在一起,万一如果需要调用其他类型的对象,则必须修改Controller类的代码。
如果Controller类接收的是一个抽象的接口变量IBack,则任何实现了该接口的对象都可以被Controller类对象所回调,Controller类的代码就再不用被修改,保证了代码对环境的适应性,无疑是一个很好的解决方案。

相关文章

  • C#实现接口回调

    1.通常情况下,我们创建一个对象,并马上直接去使用它的方法。然而,在有些情况下,希望能在某个场景出现后或条件满足时...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • java回调函数

    利用接口来实现回调,即在调用回调函数的类中实现接口,并实现接口中的方法即回调的方法,被调用类中存在接口的熟悉,并将...

  • Android Module之间数据传递

    方法一:使用接口回调 (1)在子module创建回调接口(参数可变) (2)在子module 实现类设置接口回调 ...

  • Java基础(4)——接口interface

    本节内容1.接口的理解和定义2.接口实现数据回调3.接口实现回调(中介租房) 一、接口的理解和定义1.接口:一套协...

  • Springboot实战系列之@Autowired注入类的lis

    一个回调接口有多种回调逻辑,在项目启动时需要将回调接口的实现类都放到一个list中然后回调每个实现类的具体方法。在...

  • 移动架构--13.简单仿网络访问框架

    1.提供网络请求的包装类 2.网络访问结果回调接口 3.网络访问具体实现接口 4.供应用层回调的网络访问回调接口 ...

  • Java到Android逐步理解接口回调

    一,什么是接口回调: 接口回调(自己理解):例如A.class这个类实现了某一接口(C),我们可以把创建A类对象的...

  • android回调机制(附源码)

    1.回调的用处 1.要实现一个回调,一般需要三个类: 定义接口类、实现接口类、设置触发接口类;2.在android...

  • C#接口理解应用,接口回调

    using System.Collections.Generic; using System.Linq; usin...

网友评论

      本文标题:C#实现接口回调

      本文链接:https://www.haomeiwen.com/subject/muqnyftx.html