如何让C#中的遗留类与记录共享同一方法实现?
复用接口方法实现的可行方案
可以实现代码复用,下面是几种实用的操作方式:
1. 提取逻辑到静态工具类
把ExampleMethod的核心逻辑抽离到独立的静态工具类中,让两个实现类直接调用这个工具方法,既实现复用,又不影响原有类的结构。
示例代码:
// 原接口定义 public interface IExample { void ExampleMethod(); } // 复用逻辑的静态工具类 public static class ExampleLogicHelper { public static void RunExampleLogic() { // 这里放原本在ExampleMethod里的核心业务代码 Console.WriteLine("执行复用的ExampleMethod逻辑"); // 其他业务逻辑... } } // 遗留类实现接口,调用工具类方法 public class ExampleClass : IExample { public void ExampleMethod() { ExampleLogicHelper.RunExampleLogic(); // 可选:添加ExampleClass特有的额外逻辑 } } // 记录类实现接口,同样调用工具类方法 public record ExampleRecord : IExample { public void ExampleMethod() { ExampleLogicHelper.RunExampleLogic(); // 可选:添加ExampleRecord特有的额外逻辑 } }
2. 使用默认接口方法(C# 8.0及以上)
在IExample接口中直接实现ExampleMethod的默认逻辑,这样实现类如果不需要自定义逻辑,就无需重写,直接继承接口的默认实现。
示例代码:
public interface IExample { // 接口中定义默认实现 void ExampleMethod() { Console.WriteLine("执行接口默认的ExampleMethod逻辑"); // 核心业务代码... } } // 遗留类直接使用默认实现,无需重写 public class ExampleClass : IExample { // 如果需要自定义,再重写ExampleMethod即可 } // 记录类同理,默认使用接口的实现 public record ExampleRecord : IExample { // 按需重写方法 }
注意:默认接口方法无法访问实现类的私有成员,如果逻辑需要依赖类的内部状态,这种方式不太适用。
3. 抽象基类共享实现(有继承条件时用)
如果ExampleClass和ExampleRecord没有其他父类限制,可以定义一个抽象基类实现IExample并提供ExampleMethod的通用逻辑,让两者继承这个基类。
示例代码:
public abstract class BaseExample : IExample { // 提供通用实现,子类可按需重写 public virtual void ExampleMethod() { Console.WriteLine("执行基类共享的ExampleMethod逻辑"); // 核心业务代码... } } // 遗留类继承基类 public class ExampleClass : BaseExample { // 可选:重写ExampleMethod添加自定义逻辑 } // 记录类继承基类 public record ExampleRecord : BaseExample { // 可选:重写ExampleMethod添加自定义逻辑 }
注意:C#是单继承,如果遗留类已经有父类,这种方式就无法使用。
内容的提问来源于stack exchange,提问作者dohlenaugur
相关产品推荐
相关产品推荐

