接口与抽象类

时间:2009-04-14 13:18:57

标签: c# inheritance interface abstract-class

在C#中,何时应该使用接口,何时应该使用抽象类?什么可以作为决定因素?

4 个答案:

答案 0 :(得分:129)

抽象类的优点是:

  • 能够指定方法的默认实现
  • 为函数添加了不变检查
  • 对“接口”方法的调用方式稍加控制
  • 能够提供与“免费”
  • 的界面相关或不相关的行为

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

答案 1 :(得分:78)

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

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

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

答案 2 :(得分:8)

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

答案 3 :(得分:5)

真正的问题是:是否使用接口或基类。这已经包含在内了。

在C#中,抽象类(标有关键字“abstract”的抽象类)只是一个不能实例化对象的类。这与简单地区分基类和接口有着不同的目的。