首页 > 解决方案 > C# 8 - 多重继承“抽象类”?

问题描述

在我看来,就像 C# 8.0 的特性,默认接口成员实现,本质上允许在接口级别创建实现。再加上一个类可以实现多个接口的事实,它似乎非常接近类的多重继承结构。据我了解,这似乎与语言设计的核心完全相反。

这种差异从何而来?这为实际的抽象类留下了多少空间?

这个问题已被建议作为我的答案,虽然它很有用,但它并不能完全回答我的问题。更准确地说:

标签: c#interfaceabstract-classc#-8.0

解决方案


我一直认为单继承是 C# 设计的核心原则之一

这是不准确的。单继承是设计目标的一种手段,但它本身并不是一个目标。

这就像说自动变速器是汽车制造商的核心设计原则,而实际目标是让汽车更容易、更安全。纵观汽车市场,手动变速器仍然在市场的低端(因为它们更便宜)和高端(高性能跑车)中蓬勃发展,它们非常适合用途。这些领域的许多型号仍然可以使用任何一种传输方式。

C# 中导致单一继承的实际设计目标更多是关于内存访问和重载解决方案的安全性和正确性。与单继承相比,多继承很难在数学上验证这些东西。但是当他们找到优雅的解决方案时,C# 设计人员添加了许多扩展单继承界限的功能。除了接口之外,我们还有部分类、泛型(以及后来的协变/逆变)和委托成员,它们都朝着这个方向发展。

在这种情况下,默认实现在安全地提供弱多重继承方面是有效的,因为继承的功能不会从两个方向向下级联继承树。你不能通过继承两个具有不同接口实现的不同类来制造冲突;您仅限于自己的类实现、默认实现或通过继承可用的单个实现。


推荐阅读