接口与抽象类

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

抽象类的优点是:

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

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

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

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

通常使用接口来指定类的能力,类不一定非常相似。

另一件要考虑的事情是,因为没有多重inheritance,所以如果你希望一个类能够从你的接口/抽象类实现/inheritance,但是从另一个基类inheritance,那就使用一个接口。

真正的问题是:是否使用接口或基类。 这已经被覆盖了。

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