You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.8中如何将解析器类作为参数实现函数复用?

如何复用仅依赖不同解析类的重复逻辑?

你有7个逻辑完全一致的函数,唯一区别是用到的解析类不同(比如Parser和Parser2),这些类都有同名的ParseFiles方法但实现不同,示例代码如下:

private void modifier()
{
    foreach (variable_type entry in new Parser().ParseFiles(generic_input))
    {...}
    return;
}
private void modifiertypes()
{
    foreach (variable_type entry in new Parser2().ParseFiles(generic_input))
    {...}
    return;
}

完全可以通过依赖抽象而非具体类的方式实现逻辑复用,不需要维护多个重复函数,下面是几种可行方案:

1. 定义接口(最推荐的方式)

先定义一个包含ParseFiles方法的接口,让所有解析类都实现这个接口:

public interface IParser
{
    IEnumerable<variable_type> ParseFiles(string generic_input); // 参数类型可根据实际场景调整
}

// Parser类实现接口
public class Parser : IParser
{
    public IEnumerable<variable_type> ParseFiles(string generic_input)
    {
        // 原有实现代码
    }
}

// Parser2类同样实现接口
public class Parser2 : IParser
{
    public IEnumerable<variable_type> ParseFiles(string generic_input)
    {
        // 原有实现代码
    }
}

然后把重复逻辑抽成一个通用函数,接收IParser类型的参数:

private void ModifyWithParser(IParser parser)
{
    foreach (variable_type entry in parser.ParseFiles(generic_input))
    {
        // 原有的循环逻辑,完全复用
    }
}

调用时直接传入不同解析类的实例即可:

// 使用Parser处理
ModifyWithParser(new Parser());
// 使用Parser2处理
ModifyWithParser(new Parser2());

2. 使用委托(无需定义接口的轻量方案)

如果只需要针对ParseFiles这个方法传递逻辑,可以用委托实现:
先定义匹配ParseFiles方法签名的委托:

public delegate IEnumerable<variable_type> ParseFilesDelegate(string input);

然后通用函数接收这个委托参数:

private void ModifyWithParseMethod(ParseFilesDelegate parseMethod)
{
    foreach (variable_type entry in parseMethod(generic_input))
    {
        // 复用的循环逻辑
    }
}

调用时直接传入对应类的方法:

// 传入Parser的ParseFiles方法
ModifyWithParseMethod(new Parser().ParseFiles);
// 传入Parser2的ParseFiles方法
ModifyWithParseMethod(new Parser2().ParseFiles);

3. 泛型配合约束(适用于类有统一构造逻辑的场景)

如果所有解析类都有无参构造函数,也可以用泛型+约束的方式:

private void Modify<T>() where T : IParser, new()
{
    foreach (variable_type entry in new T().ParseFiles(generic_input))
    {
        // 复用逻辑
    }
}

调用时指定泛型类型:

Modify<Parser>();
Modify<Parser2>();

方案对比

最推荐接口方案,它遵循面向对象的依赖倒置原则,代码扩展性更强——后续新增解析类时,只要实现IParser接口就能直接复用通用函数,不需要修改原有逻辑。

内容的提问来源于stack exchange,提问作者Filipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:45:46