【发布时间】:2014-08-12 19:43:19
【问题描述】:
我有一个包含多个方法的类,其中一个是 Save() 方法。我想有不同的保存实现:保存到数据库、保存到文件等。所以,说这是类:
MyClass
Add()
Remove()
Save()
添加和删除实现对所有人都是通用的。只有 Save 会有所不同。在这种情况下,使用 Save 作为抽象方法创建一个抽象类会更合适吗?或者使用接口有什么好处?如果我在这里使用接口,我需要将 Add 和 Remove 的实现复制到所有实现该接口的类,对吗?在这里只使用一个带有 Save 方法的 ISave 接口是没有意义的,因为我所有的实现类仍然需要定义 Add 和 Remove?
只是想更好地理解接口和抽象类的用法......
不确定编程语言是否会有所不同,但我使用的是 C#。
【问题讨论】:
-
您可以设计程序以非常有效地使用其中任何一个。
-
@Servy 如果我走接口路线,我怎么能不复制添加和删除的实现呢?
-
虽然两者都可以,但 C# 并不真正支持接口上的具体方法。您可以在需要时使用扩展方法解决这个问题,但如果您有一个具体的实现,通常是抽象类的情况。话虽如此,@dbc 提出的让抽象类实现接口的建议还不错。
-
@emodendroket 所以抽象类具有 Add 和 Remove 实现,并实现 Save 接口,但具体类将是实现和履行 ISave 接口合同的类?这可能吗?
-
@Prabhu 正如我从一开始就说的那样,both are just fine。我的全部前提是两者都不是特别好。
标签: c# oop interface abstract-class