C#委托回调举个例子说明一下怎么用
时间: 2024-09-02 13:04:13 浏览: 49
在C#中,委托(Delegate)是一种类型,它用于封装方法并充当函数指针的角色,常用于事件处理、异步编程中的回调机制。下面是一个简单的委托和回调的例子:
```csharp
using System;
// 定义委托类型,这里假设我们有一个处理字符串操作的方法
public delegate void StringHandler(string input);
class Program
{
// 创建委托实例,代表具体的字符串处理方法
private static StringHandler stringProcessor = ProcessString;
// 要处理的字符串操作方法
public static void ProcessString(string input)
{
Console.WriteLine($"Processing string: {input}");
}
static void Main()
{
// 实现委托的方法,这里是另一个处理数字的方法
Action<int> processNumber = PrintNumber;
// 使用委托调用方法,这里通过委托间接调用了processNumber方法
// 这就是回调的概念,回调函数(在这里是processNumber)会在适当的时候被调用
void PerformAction(StringHandler action)
{
action("Hello World!"); // 输出 "Processing string: Hello World!"
}
PerformAction(processNumber); // 相当于 ProcessNumber(5); 因为processNumber实际是打印数字
// 现在将stringProcessor赋值给processNumber,实现了回调
processNumber = stringProcessor;
// 再次调用,这次会执行ProcessString方法
performAction("Another string"); // 输出 "Processing string: Another string"
}
}
private static void PrintNumber(int number)
{
Console.WriteLine($"Processed number: {number}");
}
```
在这个例子中,`PerformAction` 方法接受一个 `StringHandler` 类型的参数,并在其内部调用这个委托。`processNumber` 变量起初指向 `PrintNumber` 方法,后来又改变为指向 `ProcessString`,实现了从处理数字到处理字符串的回调。