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

为何采用子类继承基类并实现接口而非基类直接实现接口?

这种接口间接实现方式的合理理由

首先看示例代码:

using System;

public interface MustImplement
{
    public void DoSomething();
}

public class Base
{
    public void DoSomething()
    {
        Console.WriteLine("Something must be done");
    }
}

public class Child: Base, MustImplement
{
    //无需在此实现MustImplement接口,因为基类已实现该方法。
}

对比让基类直接继承MustImplement并实现virtual方法的方案,这种写法的合理理由主要有以下几点:

  • 解耦基类与业务接口的依赖:基类Base的DoSomething可能是自身通用功能的一部分,和MustImplement这个业务接口没有必然关联。不让基类实现接口,能避免把业务特定的接口耦合到通用基类中,保持基类的职责单一性,后续修改接口或基类时互不影响。

  • 灵活控制接口的应用范围:如果基类实现了MustImplement,所有继承Base的子类都会自动继承这个接口契约,但并非所有子类都需要满足该接口要求。这种写法可以让只有需要的子类才显式声明实现接口,避免不必要的接口绑定。

  • 避免强行修改基类方法的访问修饰符:基类的DoSomething如果本身是固定实现,不需要子类重写,就没必要为了实现接口而把它标记为virtual。这种写法既能让子类复用基类的实现,又能保持基类方法的封装性,防止子类随意重写破坏原有逻辑。

  • 支持基类适配多接口的场景:同一个基类可能有多个不同的业务接口需要适配,不同子类可以根据需求选择绑定对应的接口。比如Base还有DoAnotherThing方法,子类A可以实现MustImplement,子类B可以实现另一个INeedAnother接口,基类无需提前实现所有可能的接口,减少冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:41:06