c#实现接口的抽象类

我看到下面的代码布局阅读论坛和其他博客文章和适应,以提出几个问题。

public interface IService<T>
{
    int Add(T entity);
    void Update(T entity);
}

public abstract class ServiceBase<T> : IService<T>
{
    public int Add(T entity) { ... }
    public void Update(T entity) { ... }
}

public interface ICarService : IService<Car>
{
}

public class SomeBaseClass : ServiceBase<Car>, ICarService
{
    public int Add(Car entity);
    public void Update(Car entity);
}

我不明白是让抽象类实现接口的好处。对我来说,它只是觉得有点重复,我不明白有一个抽象类实现接口的好处。

>为什么抽象类ServiceBase< T>只是定义为是不需要继承IService接口?这是加倍的代码吗?
>为什么必须SomeBaseClass也牵制ICarService? ServiceBase不应该足够吗?

最佳答案
广告1:附加的抽象基类允许您在不中断实现的情况下演变接口。假设没有抽象基类,并且你会扩展接口,让我们说通过添加一个新的方法。然后你的实现被打破了,因为你的类不再实现接口。

使用一个附加的抽象基类,你可以分离这:如果你添加一个新的方法到接口,你可以在基类中提供一个虚拟的实现,所有的子类可以保持不变,可以采用匹配新的接口在稍后的时间点。

此外,这种组合允许你定义一个契约(使用接口)和提供一些默认机制(使用抽象基类)。任何对默认值很好的人都可以继承抽象基类。任何人谁想要超级精细控制任何细节可以手动实现该接口。

广告2:从技术角度来看,没有NEED在最终类中实现接口。但是,这又让你能够彼此独立地发展事物。 CarService是肯定的一个Service< Car&gt ;,但也许更多。也许只有一个CarService需要一些额外的东西,不应该进入通用接口或服务基类。 我想这就是为什么;-)

转载注明原文:c#实现接口的抽象类 - 代码日志