C#泛型委托重构(二)

创建一个使用泛型委托进行代码重构的示例

// 原始代码 - 假设我们有多个类似的方法处理不同类型的数据
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;
    }
}

这个示例展示了如何使用泛型委托进行代码重构,主要包含以下几个部分:

  1. 原始代码:

    • 展示了传统方式下需要为每种数据类型写单独的处理方法
  2. 使用泛型委托重构:

    • 定义了泛型委托 DataProcessHandler<T>
    • 创建通用的处理方法 ProcessData<T>
    • 可以处理任意类型的数据
  3. 使用示例:

    • 展示了如何使用 Lambda 表达式
    • 展示了如何使用方法组语法
  4. 现代改进版本:

    • 使用内置的 Action<T> 替代自定义委托
    • 添加了支持返回值的 Func<T,TResult> 版本

这种重构带来的好处包括:

  • 减少代码重复
  • 提高代码复用性
  • 增加灵活性
  • 使代码更易维护
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值