转载:C#实现接口回调

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

时间: 2024-10-06 13:44:02

转载:C#实现接口回调的相关文章

Android实战之 万能的接口回调

转载请标明原地址:http://blog.csdn.net/gaolei1201/article/details/47084111 前言:本人也算是自学"成才",呵呵,大学时尽管学的计算机,可是对软件开发却并不感兴趣. 毕业后看同学们或培训Android或培训IOS 4个月后都非常快找到了不错的工作.令我感到非常诧异,也非常羡慕!于是我做出了人生中重要的一个决定.開始学习Android.因为本人比較穷,所以选择自学. 学习的过程实为不易,从刚開始的一无所知时的苦苦挣扎,到学有所得后的应

Android实战之接口回调

由于自己以前也困于抽象.接口等"吓人"的东西,网上又缺乏在项目中实战运用的讲解,下面我就斗胆把自己的理解和大家交流一下下. 本人也算是自学"成才",呵呵,大学时虽然学的计算机,但是对软件开发却并不感兴趣.毕业后看同学们或培训Android或培训IOS 4个月后都很快找到了不错的工作,令我感到很诧异,也很羡煞!于是我做出了人生中重要的一个决定,开始学习Android,由于本人比较穷,所以选择自学.学习的过程实为不易,从刚开始的一无所知时的苦苦挣扎,到学有所得后的应对有

Android 接口回调机制详解

在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先介绍下回调机制原理. 回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数

http操作,模拟第三方接口回调通知

可以用来检验返回给第三方的回应SUCCESS是否正确,包括编码,是否有空格 模拟第三方接口发送回调notify <span style="white-space:pre"> </span>import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL

DialogFragment的使用+j接口回调

虽然android有Alterdialog和Progressiondialogl两种,但是这两周都太局限了,有个折中的方法是重新定义个layout,并把该layout设置成dialog样式,这样可以间接的自定义个dialog样式,但是现在android提供了一个更基础的类DialogFragment.然后利用接口回调的方法对点击事件进行监听. 1.DialogFragment.class @SuppressLint("NewApi") public class DiagFragment

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

接口回调和向上转型

抄别人的,但为了自己掌握更加的踏实,所以复制到这里,拜谢原创!http://blog.csdn.net/u014025369/article/details/24707525 接口回调是指:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法.实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调.看下面示例.interface People {     void people

接口_ _接口回调机制

在Android中到处可见接口回调机制,尤其是UI事件处理方面,本文给大家介绍android接口回调机制,涉及到android接口回调相关知识,对本文感兴趣的朋友可以参考下本篇文章 在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先

Android接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法 Button btn = new Button(this); btn

Java中的接口回调

接口回调是多态的另一种体现.接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法.当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调.不同的类在使用同一接口时,可能具有不同的功能体现.即接口的方法体不必相同,因此接口回调可能产生不同的行为. 接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理. 现在有两个类,一个是A,一个是B,回调就是A去调用B中的某个方法,然后B又回调A中