C#中的接口可以被没有数据字段的抽象类替换吗?

时间:2018-12-06 18:44:42

标签: c# interface

如果C#允许从多个类继承,但前提是它们中最多只有一个具有数据字段,则接口将是多余的。

这样的无字段抽象类将在许多方面优于接口。例如,我们可以使用默认实现(仅在C#8.0中作为新的语言功能)或与接口相关的实用程序方法。这种语言会更简单,少一个概念。

1 个答案:

答案 0 :(得分:3)

不,语言不会更简单-相反:

  • 您的代码阅读器不知道抽象类是否包含字段,因此他们将必须阅读代码以查看您是否共享接口或实现
  • 接口可以通过值类型实现。您将必须为“无域”抽象类设置一个例外,或者创建一个system.web来替换abstract struct
  • 可以使用扩展方法代替默认实现以“水平”共享代码
  • 由于向抽象类中添加字段将使其不具备多重继承的资格,因此扩展基类将破坏派生类。

从语言中删除关键字要付出很高的代价。