我最近遇到了下一个版本的C#中正在考虑添加的功能列表。其中之一是所谓的“默认的接口方法”:如果在C#8.0中实现默认接口方法,为什么我需要抽象类?
https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md
总之,它可以让你对接口本身含义接口现在可以实现定义了实际的方法实现。既然是这样,并且C#类可以从多个接口实现/继承,那么为什么我会使用抽象类?
唯一让我想到的是接口不能有构造函数,所以也许需要在抽象类构造函数中运行一些逻辑,这将证明定义一个抽象类是合理的。
是否有任何人可以想到的其他场景?
抽象类可以有状态。试图用默认的接口方法来执行状态会很痛苦。 – willaien
这与从C#3.0开始编写接口的扩展方法的能力没有多大区别。从那时起,你曾经不得不创建一个抽象类的任何原因仍然存在。 – Servy
@Servy可以通过特定的接口实现者重写扩展方法来提供更高效的实现吗? – PetSerAl