在抽象类和接口(interface)之间有两种选择。 Microsoft 解决方案和 Oracle 解决方案:
Microsoft,设计指南:
使用抽象类(在 Visual Basic 中必须继承)而不是接口(interface)来将契约与实现分离。
http://msdn.microsoft.com/en-us/library/ms229013.aspx
Oracle,Java 教程:
如果抽象类只包含抽象方法声明,则应将其声明为接口(interface)。
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
我的问题是哪种方式是正确的? Microsoft 或 Oracle 解决方案?请注意,我认为在抽象类或接口(interface)之间进行选择不应取决于编程语言(Java 或 C#)。
最佳答案
如果我没记错我的博客阅读内容,Microsoft 使用抽象类的建议源于使用抽象类重用实现的能力,这是接口(interface)无法做到的。
另请注意,您链接到的 Microsoft 页面专门指导编写代码库以在多个项目中共享/重用。在这种情况下,您可能会自己编写接口(interface)的所有实现,可能是在同一个程序集中。在单个产品或系统上工作的良好做法会有所不同。
我在多种语言的大量代码库中看到的一种常见方法是:
- 定义一个接口(interface)来指定合约
- 创建一个实现契约的抽象类,以提供对所有后代有用的任何通用实现
- 为了方便起见,合约的实现可以选择从基类开始,或者如果他们想要完全控制则只实现接口(interface)
.NET 世界中常见的第四步是提供构建在接口(interface)上的便利扩展功能。
关于c# - 抽象类或接口(interface)。哪种方式是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243589/