Ami*_*yan 8 .net c# java abstract-class interface
在抽象类或接口之间进行选择有两种方法.Microsoft解决方案和Oracle解决方案:
微软,设计指南:
使用抽象(Visual Basic中的MustInherit)类而不是接口来将合同与实现分离.
http://msdn.microsoft.com/en-us/library/ms229013.aspx
Oracle,Java教程:
如果抽象类只包含抽象方法声明,则应将其声明为接口.
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
我的问题是哪种方式是正确的?Microsoft或Oracle解决方案?请注意,我认为抽象类或接口之间的选择不应该依赖于编程语言(Java或C#).
Bev*_*van 10
如果我回想起我的博客正确阅读,微软使用抽象类的建议源于使用抽象类重用实现的能力,这是接口无法做到的.
另请注意,您链接到的Microsoft页面是编写代码库以跨多个项目共享/重用的专门指导.在这种情况下的可能性是您将自己编写接口的所有实现,可能在同一个程序集中.在单个产品或系统上工作的良好实践会有所不同.
我在许多语言的许多代码库中看到的一种常见方法是:
.NET世界中常见的第四步是提供基于接口构建的便利扩展功能.
对于不同的上下文,它们是2个语句.
您引用的Microsoft指南适用于"设计类库".它说明了在那里支持抽象类的原因:你可以添加功能而不会破坏任何东西.
对于层和其他边界的分离和解耦,Microsoft也建议接口.