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
相关产品推荐
相关产品推荐

