在C#中,回调是一种常见的编程模式,通常用于异步操作或事件驱动编程。回调可以通过委托(delegate)来实现。以下是一些关键点:
-
委托(Delegate):委托是一种类型安全的函数指针,可以引用一个或多个方法。它定义了方法的签名,包括返回类型和参数列表。
-
匿名方法:可以在不显式定义方法的情况下创建委托实例的方法。
-
Lambda表达式:一种更简洁的方式来创建匿名方法。
示例代码
使用委托作为回调
csharp
using System;
// 定义一个Callback委托,用于处理字符串结果
public delegate void Callback(string result);
// Example类包含数据处理和结果展示的方法
public class Example
{
// 主入口方法
public static void Main()
{
Example example = new Example();
// 处理数据并使用DisplayResult方法作为回调
example.ProcessData("input", DisplayResult);
}
/// <summary>
/// 处理输入数据并调用回调方法显示结果
/// </summary>
/// <param name="data">需要处理的数据</param>
/// <param name="callback">处理完成后调用的回调方法</param>
public void ProcessData(string data, Callback callback)
{
// 模拟数据处理
string processedData = $"Processed {data}";
// 调用回调方法,传递处理后的数据
callback(processedData);
}
/// <summary>
/// 显示处理结果
/// </summary>
/// <param name="result">要显示的处理结果</param>
public static void DisplayResult(string result)
{
// 输出处理结果到控制台
Console.WriteLine(result);
}
}
使用匿名方法作为回调
csharp
using System;
// 定义一个Callback委托,用于处理字符串结果
public delegate void Callback(string result);
// Example类包含数据处理方法和回调机制
public class Example
{
// 程序的入口点
public static void Main()
{
Example example = new Example();
// 使用匿名方法作为回调,处理ProcessData方法的结果
example.ProcessData("input", delegate (string result)
{
Console.WriteLine(result);
});
}
/// <summary>
/// 处理输入数据,并通过回调方法返回处理结果
/// </summary>
/// <param name="data">需要处理的输入数据</param>
/// <param name="callback">处理数据完成后调用的回调方法</param>
public void ProcessData(string data, Callback callback)
{
// 模拟数据处理
string processedData = $"Processed {data}";
// 调用回调方法,将处理后的数据作为参数传递
callback(processedData);
}
}
使用Lambda表达式作为回调
csharp
using System;
// 定义一个Callback委托,用于处理字符串结果
public delegate void Callback(string result);
// Example类包含数据处理方法
public class Example
{
// 主入口方法
public static void Main()
{
Example example = new Example();
// 调用ProcessData方法并传入一个Lambda表达式作为回调
example.ProcessData("input", result => Console.WriteLine(result));
}
/// <summary>
/// 处理输入数据并调用回调方法
/// </summary>
/// <param name="data">需要处理的输入数据</param>
/// <param name="callback">处理完成后调用的回调方法</param>
public void ProcessData(string data, Callback callback)
{
// 模拟数据处理
string processedData = $"Processed {data}";
// 调用回调方法并传递处理后的数据
callback(processedData);
}
}
异步回调
在异步编程中,回调常用于处理异步操作完成后的结果。例如,使用Task和async/await关键字。
csharp
using System;
using System.Threading.Tasks;
// 定义一个用于演示异步操作的类
public class AsyncExample
{
// 程序的入口点
public static async Task Main()
{
// 调用处理数据的异步方法
await ProcessDataAsync("input");
}
// 异步处理数据的方法
public static async Task ProcessDataAsync(string data)
{
// 在后台任务中处理数据,以避免阻塞主线程
string result = await Task.Run(() =>
{
// 模拟耗时操作
return $"Processed {data}";
});
// 处理完成后调用方法来处理结果
HandleResult(result);
}
// 处理结果的方法
public static void HandleResult(string result)
{
// 输出处理后的结果
Console.WriteLine(result);
}
}
通过这些示例,你可以看到如何在C#中使用回调机制来处理不同场景下的需求。
993

被折叠的 条评论
为什么被折叠?



