【发布时间】:2011-12-31 13:54:30
【问题描述】:
我知道 C++ 支持私有继承,而 C# 只支持公共继承。我还看到一篇文章说私有继承通常定义了一个HAS-A关系和类之间的一种聚合关系。
编辑:用于私有继承的 C++ 代码: “Car has-a Engine”关系也可以使用私有继承来表示:
class Engine {
public:
Engine(int numCylinders);
void start(); // Starts this Engine
};
class Car : private Engine { // Car has-a Engine
public:
Car() : Engine(8) { } // Initializes this Car with 8 cylinders
using Engine::start; // Start this Car by starting its Engine
};
现在,有没有办法在 C# 类之间创建 HAS-A 关系,这是我想知道的事情之一 - 如何?
另一个奇怪的问题是为什么 C# 不支持私有(也是受保护的)继承? - 不支持多重实现继承是正当理由还是其他原因?
是否为未来的 C# 版本计划了私有(和受保护)继承?
在 C# 中支持私有(和受保护)继承是否会使其成为更好和更广泛使用的语言?
【问题讨论】:
-
继承是NOT HAS-A 关系,它是并且一直是IS-A 关系。
-
@Als private Inheritance 是aggregation/has-a relationship的一种语法变体——本文:parashift.com/c++-faq-lite/private-inheritance.html
-
好吧,当然 C# 已经支持 HAS-A 关系。您只需创建一个包含该其他类实例的私有/受保护成员变量,而不是扩展另一个类。 C++ 的私有/受保护继承的主要好处是它授予对其他类中受保护成员数据的访问权限。
-
Scott Meyers 建议您将私有继承视为“按条款实现”的关系。
-
@Als:但是私有继承不能真正被视为一种 is-a 关系,只有
friends 是可见的。我总是将私有继承视为根据关系实现的。
标签: c# c++ inheritance aggregation private-inheritance