fes*_*fes 32 c# interface abstract
我已经看到以下代码布局阅读论坛和其他博客文章,并进行了调整,以便提出几个问题.
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);
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是让抽象类实现接口的好处.对我来说,它只是感觉有点重复,我无法理解实现接口的抽象类的好处.
ServiceBase<T>只是定义为不需要继承IService接口?这会使代码翻倍吗?SomeBaseClass还必须加入ICarService?ServiceBase不应该足够吗?Gol*_*den 37
广告1:附加的抽象基类允许您在不破坏实现的情况下发展接口.假设没有抽象基类,你可以通过添加一个新方法来扩展接口.然后你的实现被破坏了,因为你的类不再实现接口了.
使用额外的抽象基类,您可以将其分开:如果向接口添加新方法,则可以在基类中提供虚拟实现,并且所有子类可以保持不变,并且可以采用以匹配新的接口在以后的某个时间点.
此外,这种组合允许您定义一个契约(使用接口)并提供一些默认机制(使用抽象基类).任何对默认值都没问题的人都可以从抽象基类继承.任何想要对任何小细节进行超级精细控制的人都可以手动实现界面.
广告二:从技术角度看有没有必要性,以实现最终的类接口.但是,这再次允许您将事物彼此分开.A CarService肯定是a Service<Car>,但也许更多.也许只CarService需要一些不应该进入公共接口或服务基类的其他东西.
我猜这就是原因;-)