C# 回调函数有几种方式,请详细解说并举例
时间: 2024-10-19 18:14:50 浏览: 24
02463156callbackforvc.rar
在 C# 中,回调函数主要用于处理异步操作的结果、事件处理以及作为方法的参数传递自定义的行为。主要有以下三种常见的回调方式:
1. **委托(Delegates)**:这是 C# 中最基础的回调机制。你可以创建一个委托类型,它封装了对某个方法的引用。例如:
```csharp
delegate void MyCallback(string message);
// 定义回调函数
void HandleMessage(string msg) {
Console.WriteLine($"Received message: {msg}");
}
// 使用委托调用
MyCallback callback = HandleMessage;
callback("Hello, world!");
```
2. **事件(Events)**: 类似于观察者模式,事件允许对象之间基于特定条件发送和接收消息。比如:
```csharp
public class Button {
public event EventHandler Clicked;
public void OnClick() {
Clicked?.Invoke(this, EventArgs.Empty); // 发布事件
}
}
// 在另一个类中订阅事件
public class EventListener {
private Button button;
public EventListener(Button button) {
this.button = button;
button.Clicked += Button_Clicked;
}
private void Button_Clicked(object sender, EventArgs e) {
Console.WriteLine("Button clicked");
}
}
```
3. **lambda表达式和Action/Func委托**: 这种形式更为简洁,可以直接将方法体作为一个参数传递给其他方法,尤其适用于LINQ查询和异步编程中的回调。例如:
```csharp
Action<string> printMessage = message => Console.WriteLine(message);
printMessage("Hello from lambda");
```
或者用于async方法的完成操作:
```csharp
async Task ProcessAsync(string data, Func<Task> onCompleted = null) {
await Task.Delay(1000);
onCompleted?.Invoke();
}
ProcessAsync("Processing...").OnCompleted(() => Console.WriteLine("Done"));
```
阅读全文