创建一个使用泛型委托进行代码重构的示例
// 原始代码 - 假设我们有多个类似的方法处理不同类型的数据
public class DataProcessor
{
public void ProcessIntData(int data)
{
Console.WriteLine($"处理整数数据: {data}");
// 具体处理逻辑
}
public void ProcessStringData(string data)
{
Console.WriteLine($"处理字符串数据: {data}");
// 具体处理逻辑
}
public void ProcessDoubleData(double data)
{
Console.WriteLine($"处理浮点数据: {data}");
// 具体处理逻辑
}
}
// 使用泛型委托重构后的代码
public class GenericDataProcessor
{
// 定义泛型委托
public delegate void DataProcessHandler<T>(T data);
// 通用的数据处理方法
public void ProcessData<T>(T data, DataProcessHandler<T> processor)
{
Console.WriteLine($"开始处理 {typeof(T).Name} 类型的数据");
processor(data);
Console.WriteLine("处理完成");
}
}
// 使用示例
class Program
{
static void Main()
{
var processor = new GenericDataProcessor();
// 处理整数
processor.ProcessData(42, (int x) => {
Console.WriteLine($"处理整数: {x}");
});
// 处理字符串
processor.ProcessData("Hello", (string s) => {
Console.WriteLine($"处理字符串: {s}");
});
// 处理浮点数
processor.ProcessData(3.14, (double d) => {
Console.WriteLine($"处理浮点数: {d}");
});
// 使用方法组语法
processor.ProcessData(100, ProcessInteger);
}
static void ProcessInteger(int value)
{
Console.WriteLine($"通过单独的方法处理整数: {value}");
}
}
// 更进一步的改进 - 使用内置委托类型
public class ModernDataProcessor
{
// 使用 Action<T> 替代自定义委托
public void ProcessData<T>(T data, Action<T> processor)
{
Console.WriteLine($"开始处理 {typeof(T).Name} 类型的数据");
processor(data);
Console.WriteLine("处理完成");
}
// 使用 Func<T,TResult> 的版本 - 支持返回值
public TResult ProcessDataWithResult<T, TResult>(T data, Func<T, TResult> processor)
{
Console.WriteLine($"开始处理 {typeof(T).Name} 类型的数据");
var result = processor(data);
Console.WriteLine("处理完成");
return result;
}
}
这个示例展示了如何使用泛型委托进行代码重构,主要包含以下几个部分:
-
原始代码:
- 展示了传统方式下需要为每种数据类型写单独的处理方法
-
使用泛型委托重构:
- 定义了泛型委托
DataProcessHandler<T> - 创建通用的处理方法
ProcessData<T> - 可以处理任意类型的数据
- 定义了泛型委托
-
使用示例:
- 展示了如何使用 Lambda 表达式
- 展示了如何使用方法组语法
-
现代改进版本:
- 使用内置的
Action<T>替代自定义委托 - 添加了支持返回值的
Func<T,TResult>版本
- 使用内置的
这种重构带来的好处包括:
- 减少代码重复
- 提高代码复用性
- 增加灵活性
- 使代码更易维护
945

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



