以下为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类的代码就再不用被修改,保证了代码对环境的适应性,面向接口编程无疑是一个很好的解决方案。
分享到:
相关推荐
c#回调函数,十分清晰简单易懂
C#回调函数示例 + VS2013 代码
C# 实现回调函数C# 实现回调函数C# 实现回调函数C# 实现回调函数C# 实现回调函数
C# 回调CV++ DLL 三种方法 和 多类之间共享一个回调函数,VS2010下运行, 整个DLL中共享使用一个回调函数
C# 回调函数委托源码,可直接运行,有助于初学者理解委托和回调。其实回调就是委托的一种用法
详解C#委托,事件与回调函数
回调函数的认识,和大概理解,大家交流学习
一个Demo,描述了C#如何在C++中注册函数并回调
c#线程结束后,实现的委托回调函数源码 线程结束,通知主线程,并且可以实现对主线程控件的安全访问
c#的回调函数(delegate关键字)
往界面上拖一个定时器Timer,一个Textbox,均不需要改名字,需要为定时器添加tick事件,然后将文件中的代码粘贴到响应位置,...代码简单易懂,注释清晰,一个理解委托和回调函数的极好例子,分享供需要的同学们学习一下
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
附件是一套C#调用C++dll时,实现回调函数的Demo程序。亲测可用。
c++回调c#方法,传递结构体(中含结构体)
单页ajax 回调技术;在开发winform程序时不会考虑页面刷新问题,只要控制好线程别导致假死就ok了,但是在开发web页面程序时,刷新有的时候真是头痛的很。页面回调可以解决这个问题,下面简单就实用来讲对callback做...
在客户端回调中,客户端脚本函数会向 ASP.NET 网页发送请求,该网页随后会运行其正常生命周期的简化版本以处理该回调。若要确保回调事件源于预期的用户界面 (UI),可以对回调进行验证。在回调验证中,应先在网页呈现...
异步消息的传递-回调机制 异步消息的传递-回调机制
C# VS2010 事件回调 相机系统应用 一种相机通常使用的事件回调结果。做成一个简单的示范例程。。经多个相机实践可以使用
C#借助C++实现IBindStatusCallback接口,从而使得使用 DownloadToFile 可以实现进度监视,暂停控制,终止等 C# 和 C++ 部分的全部源代码