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

C#多个类存在相同实例方法如何实现复用避免重复拷贝?

C# 多类重复实例方法复用方案

完全不需要重复拷贝代码,C#提供了多种成熟的复用方案,可根据你的业务场景选择:

方案1:基类继承(最简单直接,适合类之间存在同类型业务语义的场景)

把三个类的公共方法和公共依赖字段/属性抽成一个基类,其他类直接继承基类即可:

// 抽离的公共基类
public class BaseParseClass
{
    // 如果三个方法用到的字段是各个子类独有的,可以定义为抽象/虚属性
    public virtual void parseFunctionA()
    {
        // 原方法逻辑
    }
    public virtual void parseFunctionB()
    {
        // 原方法逻辑
    }
    public virtual void parseFunctionC()
    {
        // 原方法逻辑
    }
}

// 子类继承即可拥有所有公共方法
public class myclass1 : BaseParseClass
{
    public string METHOD;
    public string RATE;
    public string QTY;
}

public class MYCLASS2 : BaseParseClass
{
    public string PRICE;
    public string WEIGHT;
}

注意:如果你的类已经有其他父类,C#不支持多类继承,该方案不适用

方案2:接口+默认实现(适合需要多继承特性、使用C# 8及以上版本的场景)

定义公共接口,给三个方法加上默认实现,类只要实现这个接口就可以直接用这些方法:

public interface IParseable
{
    void parseFunctionA()
    {
        // 原方法逻辑
    }
    void parseFunctionB()
    {
        // 原方法逻辑
    }
    void parseFunctionC()
    {
        // 原方法逻辑
    }
}

// 类实现接口即可
public class myclass1 : IParseable
{
    public string METHOD;
    public string RATE;
    public string QTY;
}

public class MYCLASS2 : IParseable
{
    public string PRICE;
    public string WEIGHT;
}

方案3:扩展方法(适合无法修改原有类的继承关系、不能改动类定义的场景)

写静态类定义针对这些类的扩展方法,不需要改动原有类的结构:

// 公共扩展方法静态类
public static class ParseExtensions
{
    public static void parseFunctionA<T>(this T target) where T : class
    {
        // 原方法逻辑,如果需要访问类的字段/属性,可以加接口约束T
    }
    public static void parseFunctionB<T>(this T target) where T : class
    {
        // 原方法逻辑
    }
    public static void parseFunctionC<T>(this T target) where T : class
    {
        // 原方法逻辑
    }
}

// 原有类不需要任何改动,就可以直接调用扩展方法
var obj1 = new myclass1();
obj1.parseFunctionA();

方案4:组合模式(符合组合优于继承的设计原则,适合逻辑较重、后续可能频繁迭代的场景)

把公共解析逻辑抽成独立的服务类,在需要用到的类里注入这个服务即可:

// 抽离的公共解析服务
public class ParseService
{
    public void parseFunctionA()
    {
        // 原方法逻辑
    }
    public void parseFunctionB()
    {
        // 原方法逻辑
    }
    public void parseFunctionC()
    {
        // 原方法逻辑
    }
}

// 业务类里注入服务使用
public class myclass1
{
    private readonly ParseService _parseService = new ParseService();
    public string METHOD;
    public string RATE;
    public string QTY;

    // 直接调用服务方法,也可以封装一层对外暴露
    public void Test()
    {
        _parseService.parseFunctionA();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:03