首页 > 编程语言 >除了委托和事件,C#中还有其他实现回调机制的方式吗?

除了委托和事件,C#中还有其他实现回调机制的方式吗?

时间:2024-11-06 12:45:33浏览次数:3  
标签:排序 委托 C# 接口 int 回调 方法 Lambda

除了委托和事件,C#中还可以通过以下几种方式实现回调机制:

一、接口回调

  1. 定义接口
    • 首先定义一个包含回调方法签名的接口。例如,假设要实现一个数据处理完成后的回调通知,可定义如下接口:
interface IDataProcessingCallback
{
    void OnDataProcessed(int result);
}
- 这里定义的接口 `IDataProcessingCallback` 规定了一个名为 `OnDataProcessed` 的方法,该方法接受一个整数参数且无返回值,用于在数据处理完成后执行相应操作。
  1. 实现接口的类
    • 接着创建实现该接口的类,并在类中实现 OnDataProcessed 方法。例如:
class DataProcessor
{
    private IDataProcessingCallback _callback;

    public DataProcessor(IDataProcessingCallback callback)
    {
        _callback = callback;
    }

    public void ProcessData(int input)
    {
        // 模拟数据处理过程
        int result = input * 2;

        // 调用回调方法
        _callback.OnDataProcessed(result);
    }
}
- 在 `DataProcessor` 类中,通过构造函数接收一个 `IDataProcessingCallback` 接口的实例,并在 `ProcessData` 方法中完成数据处理后,调用该接口实例的 `OnDataProcessed` 方法,实现回调。
  1. 使用接口回调
    • 在其他类中,创建实现接口的实例并将其传递给 DataProcessor 类。例如:
class Program
{
    static void Main()
    {
        DataProcessor processor = new DataProcessor(new MyCallback());
        processor.ProcessData(5);
    }

    class MyCallback : IDataProcessingCallback
    {
        public void OnDataProcessed(int result)
        {
            Console.WriteLine($"数据处理结果: {result}");
        }
    }
}
- 在上述代码中,创建了 `DataProcessor` 类的实例 `processor`,并将实现了 `IDataProcessingCallback` 接口的 `MyCallback` 类实例传递给它。当 `processor` 执行 `ProcessData` 方法完成数据处理后,就会调用 `MyCallback` 类中的 `OnDataProcessed` 方法,实现回调机制。

二、匿名方法

  1. 使用匿名方法实现回调
    • 在C# 2.0及以后版本中,可以使用匿名方法来实现回调机制。例如,在一个简单的数组排序后回调的场景中:
class Program
{
    static void Main()
    {
        int[] numbers = { 5, 3, 8, 1, 6 };

        Array.Sort(numbers, delegate (int x, int y)
        {
            return x - y;
        });

        // 排序完成后执行匿名方法作为回调
        Array.ForEach(numbers, delegate (int num)
        {
            Console.WriteLine(num);
        });
    }
}
- 这里首先使用 `Array.Sort` 方法对数组 `numbers` 进行排序,其中第二个参数传入一个匿名方法,用于指定排序的比较规则。然后在排序完成后,使用 `Array.ForEach` 方法遍历数组,并传入另一个匿名方法作为回调,用于输出数组中的每个元素。

三、Lambda表达式

  1. 使用Lambda表达式实现回调
    • Lambda表达式是一种更简洁的匿名方法写法,在C# 3.0及以后版本中广泛使用。以上述数组排序及输出的场景为例,用Lambda表达式实现回调机制如下:
class Program
{
    static void Main()
    {
        int[] numbers = { 5, 3, 8, 1, 6 };

        // 使用Lambda表达式指定排序比较规则
        Array.Sort(numbers, (x, y) => x - y);

        // 使用Lambda表达式作为回调输出数组元素
        Array.ForEach(numbers, num => Console.WriteLine(num));
    }
}
- 这里同样先使用 `Array.Sort` 方法对数组进行排序,不过这次使用Lambda表达式 `(x, y) => x - y` 来指定排序比较规则。然后在排序完成后,使用Lambda表达式 `num => Console.WriteLine(num)` 作为回调来输出数组中的每个元素,实现了回调机制。

这些方式都可以在不同的场景下实现回调机制,开发者可以根据具体的需求和代码的简洁性、可读性等因素来选择合适的方式。

标签:排序,委托,C#,接口,int,回调,方法,Lambda
From: https://blog.csdn.net/alankuo/article/details/143471185

相关文章

  • 使用platformio平台Arduino开发ESP32-C2
    使用platformio平台Arduino开发ESP32-C2有两种方法,推荐方法二。方法一:安装vscode后安装platformio插件(参考:YourGatewaytoEmbeddedSoftwareDevelopmentExcellence·PlatformIO安装时,需要可靠的网络链接。使用platformio创建一个esp32-c3项目(platformio平台默认......
  • Spring Security6 升级高版本解决方案
    目录废弃WebSecurityConfigurerAdapter参考代码废弃WebSecurityConfigurerAdapterspringsecurity中WebSecurityConfigurerAdapter弃用配置AuthenticationManagerBuilderSpringSecurity6配置方法参考代码部分pom.xml配置<parent><groupId>org.springframew......
  • Scala的控制方法作用域
    Scala的控制方法作用域有5种:(1)默认访问权限如果没有指定访问修饰符,成员默认是包私有的。只能在定义它们的包内访问。(2)protected访问权限修饰的成员可以被定义它们的类本身、该类的子类以及同一个包内的其他类访问。(3)private访问权限修饰的成员只能被定义它们的类本身......
  • CF1105
    好想睡觉……A.SalemandSticks原题小链接CF题目大意:给定长度为n的序列a(1<=n<=1000,1<=a[i]<=100),要求给出一个整数t,使得∑max(abs(a[i]-t)-1,0)最小。解题思路:下意识地就开始推,哪怕看到了数据范围还是想着能不能O(n)给解决。但忐忑地翻了下题解后发现这题其实就是一个......
  • STM32G4 双ADC模式之交替触发方式
    目录概述1认识双ADC模式2功能实现2.1原理介绍2.2实现方法 2.3应用范例概述本文主要介绍STM32G4双ADC模式之交替触发方式,包括ADC模块的功能介绍,实现框架结构,以及交替触发方式ADC的转换的实现原理。1认识双ADC模式双ADC模式可用于具有两个或更多ADC的器件。......
  • Redis集群高可用实战部署(Redis Cluster High Availability Practical Deployment)
     ......