【发布时间】:2019-04-30 23:35:06
【问题描述】:
在我看来,就像 C# 8.0 的特性,默认接口成员实现,本质上允许在接口级别创建实现。再加上一个类可以实现多个接口的事实,它似乎非常接近类的多重继承结构。据我了解,这似乎与语言设计的核心完全相反。
这种差异从何而来?这为实际的抽象类留下了多少空间?
This question 已被建议作为我的答案,虽然它很有用,但它并不能完全回答我的问题。更准确地说:
- 我一直认为单继承是 C# 设计的核心原则之一,这就是为什么实现此功能的决定让我感到惊讶,并且我很想知道它源自何处(特别是 C#)。
- 链接的问题没有回答它为抽象类留出了什么空间。
【问题讨论】:
-
@Aomine 虽然该问题确实包含有用的见解,但它只回答了我的第一个问题(即不是 C# 特定的,关于我一直认为单继承是主要原则的语言设计)并且根本没有回答我的第二个问题
-
嗯,C# 一直允许实现多个接口。默认实现要求将对象转换为具有实现的接口,类似于当前显式接口实现的工作方式。我不确定默认方法是否会极大地改变模型。
-
@JonathonChase 多接口实现与继承多个实现不同。我绝不是说这是一个错误的设计决定。我认为它为滥用打开了空间,但好的用例可能远远超过风险。不过,我之前没有使用过支持此功能的语言,所以我很好奇它的影响——因此提出了这个问题。
-
@Lasooch 默认接口方法用于实现traits。从 Java 8 开始,它们就是 used in Java。PHP 具有特征 since 5.4。他们可以在少数情况下替换抽象类,但这不是主要用例。主要好处是没有多重继承的特征组合
-
@Lasooch check this answer 回答与 C# 中的特征相关的问题。该代码特定于该问题,因此不完全适合作为此处的答案而不进行修改。它包含一些指向 Sharplab.Io 示例的链接,尽管它们显示了编译器如何处理特征/默认接口方法
标签: c# interface abstract-class c#-8.0