C#实现接口回调

原创 2016年08月31日 12:37:07

通常情况下,我们创建一个对象,并马上直接去使用它的方法。然而,在有些情况下,希望能在某个场景出现后或条件满足时才调用此对象的方法。回调就可以解决这个“延迟调用对象方法”的问题。这个被调用方法的对象称为回调对象。
实现回调的原理简介如下:
首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象.控制器对象负责检查某个场景是否出现或某个条件是否满足.当此场景出现或此条件满足时,自动调用回调对象的方法.
以下为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(); 
       } 
   } 
} 

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

版权声明:欢迎转载,转载请注明原博客链接:http://blog.csdn.net/u013108312 和本文章的链接。谢谢合作。作者:CircleGood

C# 回调机制

C# 委托的回调机制 1.什么是回调函数 回调函数(callbackFunction),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。 2.C#回调...
  • Godsight
  • Godsight
  • 2017年03月04日 10:13
  • 1589

C#回调函数 (赞)

原文出处:http://blog.csdn.net/echo_qiang/article/details/6996595 C#回调函数应用示例,形象比喻方法助理解,整理了一个简单的例子来说明...
  • chelen_jak
  • chelen_jak
  • 2017年01月05日 15:22
  • 1742

接口回调原理

题外话:这篇博客包含了我其中一个最耗费我时间去理解的知识点。理解能力渣渣,接口回调技术曾经用了两星期去理解才理解,说理解我都不自信,因为我都不知道我写的是不是接口回调,只是因为我看着长得像,就写出来看...
  • wjb857999880
  • wjb857999880
  • 2016年01月15日 13:57
  • 536

接口回调的原理:接口变量 调用 被类实现的接口的方法

接口回调的原理:接口变量 调用 被类实现的接口的方法   (2012-02-14 14:42:35) 转载▼ 标签:  杂谈 分类: javaLearn...
  • songjunyan
  • songjunyan
  • 2014年10月29日 13:44
  • 1972

C#中委托、事件和回调函数的理解

C# 委托 事件 回调
  • hit_why
  • hit_why
  • 2017年01月18日 22:39
  • 4068

实现接口回调的C#代码

  • 2008年12月17日 18:37
  • 12KB
  • 下载

android 接口回调

接口回调是android中非常重要的,我也不是特别熟悉,在这小小分析一下 下面是注意的几点分析:以一个dialog作为例子 public class DialogUtil {     pri...
  • QQ55214
  • QQ55214
  • 2015年04月30日 21:23
  • 378

接口回调的原理:接口变量 调用 被类实现的接口的方法

今天偶遇一个大哥问我一个j2se的问题,结果我就懵了,现在懂了,赶快给大家分享一下,自己也总结一下,省得忘了,以下内容是经过百度思索以后总结的,雷同很会高= = 二话不说,先上代码! in...
  • cuiwei1026522829
  • cuiwei1026522829
  • 2014年02月18日 01:02
  • 4910

C#使用接口实现回调

金旭亮老师图书摘录  通常情况下,我们创建一个对象,并马上直接去使用它的方法。然而,在有些情况下,希望能在某个场景出现后或条件满足时才调用此对象的方法。回调就可以解决这个“延迟调用对象方法”的问题。这...
  • cleron800
  • cleron800
  • 2007年12月20日 10:29
  • 1078

C#中的委托与Java中的接口回调

最近因为业务需求学习起了C#,对于学过Java的人来说,C#其实还是挺好懂的,基本上很多语法都是相通的。今天就谈谈我对C#和Java中不同的地方的理解吧。   说到Java中的接口回调那么就不得不提...
  • w815878564
  • w815878564
  • 2017年02月03日 14:18
  • 1283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实现接口回调
举报原因:
原因补充:

(最多只允许输入30个字)