`

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类的代码就再不用被修改,保证了代码对环境的适应性,面向接口编程无疑是一个很好的解决方案。

分享到:
评论

相关推荐

    C#回调函数示例

    在C#中,回调函数同样被广泛使用,尤其是在异步编程、事件处理和自定义算法中。本示例将通过VS2013环境,探讨如何在C#中实现和应用回调函数。 首先,我们需要理解回调函数的基本概念。回调函数本质上是一个在其他...

    C#回调函数

    在C#编程中,回调函数是一种非常重要的设计模式,它允许我们传递一个方法作为参数到另一个方法中,以便在特定事件发生或者特定条件满足时执行。这种机制使得代码具有高度的灵活性和可扩展性,特别是在处理异步操作、...

    C# 回调CV++ DLL 三种方法 和 多类之间共享一个回调函数

    本文将详细介绍三种C#回调CV++ DLL的方法以及如何在多类之间共享一个回调函数。 1. **P/Invoke(平台调用)** P/Invoke是.NET Framework提供的一种机制,允许C#代码调用非托管(如C++)代码。要实现回调,我们需要...

    C#在C++中注册回调函数

    这个函数应该符合C#回调函数的签名。然后,我们调用C++/CLI的`Bridge::SetManagedCallback`方法,传递我们的函数指针: ```cpp extern "C" void __declspec(dllexport) MyNativeCallback(const char* message) { ...

    C# 实现回调函数

    回调函数在编程中是一种强大的设计模式,特别是在C#这样的面向对象语言中,它允许你在方法执行完毕后调用另一个特定的函数。回调函数通常用于异步编程,事件处理或者作为参数传递,使得代码更加灵活和可扩展。接下来...

    C#回调函数委托源码

    下面,我们来看一个简单的C#回调函数和委托的例子: ```csharp using System; public delegate void MyCallback(int value); public class CallbackDemo { public static void Main() { MyCallback myCallback...

    c++回调c#方法

    // 将C#回调对象保存到全局变量或类成员 globalCallback = callback; } ``` 在C++原生代码中,我们可以通过C++/CLI接口调用C#的回调方法。需要注意的是,由于C++/CLI是托管代码,而C++原生代码是未托管的,因此...

    详解C#委托,事件与回调函数

    详解 C# 委托、事件与回调函数 委托是 C# 中一种非常重要的概念,它可以将方法作为参数传递给其他方法,也可以将方法作为返回值返回给其他方法。委托的定义是:delegate 返回类型 委托名(参数列表);例如:...

    c#线程结束后,实现的委托回调函数源码

    本篇将深入探讨如何在C#中实现线程结束后的委托回调功能,并安全地访问主线程中的控件。 首先,理解线程和委托的概念至关重要。线程是程序执行的流程,每个进程至少有一个线程。委托是C#中的一种类型,它类似于函数...

    c#的回调函数(delegate关键字)

    C#中的委托(Delegate) 在C#中,委托(Delegate)是一种特殊的类型,用于封装方法的引用。它可以将方法作为参数传递,类似于C++中的函数指针,但是委托是类型安全和可靠的。 在上面的代码中,我们定义了一个委托...

    c#回调函数

    回调函数的认识,和大概理解,大家交流学习

    C#传递回调函数

    在ATL的C++代码中,我们需要有一个方法来调用接收到的C#回调函数。这可以通过使用COM的`IUnknown`接口和`QueryInterface`方法获取C#对象上的接口,然后调用委托方法实现。ATL的代码可能看起来像这样: ```cpp ...

    C#调用C++动态库,执行回调函数并传递结构体参数

    本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform Invoke)技术以及对C++内存管理和调用约定的理解。 首先,C#调用C++动态库...

    C#实现C++dll回调函数.rar

    本示例“C#实现C++dll回调函数”正是探讨了如何在C#应用程序中调用C++ DLL,并在DLL中定义和使用回调函数。下面我们将详细解释这一过程中的关键知识点。 首先,我们来理解回调函数的概念。回调函数是一种设计模式,...

    C#回调简介

    ### C#中的回调机制简介 #### 一、回调的基本概念 在探讨C#中的回调机制之前,我们首先需要了解回调的基本概念。回调是一种常见的编程模式,它允许在某个事件发生或者某个条件满足时,调用预先注册的函数或方法。...

    回调的实现(C#)

    往界面上拖一个定时器Timer,一个Textbox,均不需要改名字,需要为定时器添加tick事件,然后将文件中的代码粘贴到响应位置,...代码简单易懂,注释清晰,一个理解委托和回调函数的极好例子,分享供需要的同学们学习一下

    在 ASP.NET 网页中实现回调

    在 ASP.NET 中,客户端回调是一种优化网页交互的技术,允许页面的部分内容更新而无需完整刷新。这种技术提高了用户体验,因为减少了网络通信的开销。本文将详细介绍如何在 ASP.NET 网页中实现客户端回调,包括回调...

    回调 回调 1

    在C#中,回调可以通过委托(Delegate)实现。委托是.NET框架中的一种类型,它封装了一个或多个方法,可以像传递任何其他类型的数据一样传递。创建一个委托类型,然后将实现所需功能的方法的引用赋值给委托实例,当...

    C#调用C++动态库中自身定义的回调函数

    在这个例子中,`CallBackFromCpp`函数接受一个参数,这是一个指向C#回调函数的函数指针。为了能够在C++和C#之间传递函数指针,我们需要在C#中定义一个与C++函数相同的委托类型: ```csharp ...

Global site tag (gtag.js) - Google Analytics