我最近遇到了一个正在考虑在下一个版本的 C# 中添加的功能列表。其中之一称为"默认接口方法":
https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md
简而言之,它将允许您在接口本身上定义实际的方法实现,这意味着接口现在可以具有实现。既然是这种情况,并且 C# 类可以从多个接口实现/继承,那么我为什么要使用抽象类呢?
我唯一想到的是接口不能有构造函数,所以可能需要在抽象类构造函数中运行一些逻辑,这将证明定义抽象类是合理的。
还有其他任何人都能想到的场景吗?
除了评论中提到的状态,
Base Class
不能从基类继承接口。接口只能继承接口。您需要抽象类才能从其他类派生。由于不能从类继承,因此不能重写类方法。您可以在抽象类中覆盖它。
通常类继承感觉像是分类法(x'is a'y(,而接口是行为(x'can do'y(,因此隐含的含义存在微妙的差异。尽管您是对的,技术区别不太明确。