2009-04-14 116 views
85

在C#中,什么时候应该使用接口,何时应该使用抽象类?什么是决定性因素?接口与抽象类

+29

我不同意这是“确切”的重复。 – 2009-04-14 13:45:33

回答

107

一个抽象类的优点是:对指定的方法的默认实现

  • 能力
  • 新增不变检查到功能
  • 已在“接口”方法的调用方式
  • 稍微控制
  • 能够提供与“免费”界面相关或不相关的行为

接口仅仅是数据传递合同,并没有这些功能。但是,它们通常更灵活,因为类型只能从一个类派生,但可以实现任意数量的接口。

+0

@JaredPar:我猜这是为了劝阻回答重复的问题(顺便说一句,我不是那个低估了你的人) – Brann 2009-04-14 13:34:25

5

真正的问题是:是否使用接口或基类。这已经在之前报道过了。

在C#中,抽象类(标有关键字“abstract”的一个类)只是一个类,您无法实例化对象。这与仅仅区分基类和接口之间的区别有所不同。

59

抽象类和接口在语义上是不同的,尽管它们的用法可能会重叠。

抽象类通常用作类似类的构建基础。类的常见实现可以放在抽象类中。

接口通常用于指定类的能力,其中类不一定非常相似。

6

要考虑的另一件事是,由于没有多重继承,如果您希望某个类能够从您的接口/抽象类实现/继承,但从另一个基类继承,请使用接口。