我很好奇为什么要制定这条规则。有谁知道为什么首选这种继承?有没有不同的语言?
第二个问题比第一个更容易回答。是的,其他语言的做法不同。特别是,C++ 允许“私有继承”;即继承关系成为类的私有实现细节。如果 C# 具有私有继承,那么显然基类可能比派生类更难访问。但是 C# 没有私有继承。
第一个问题很难回答,因为“为什么”问题本质上不适合 Stack Overflow。“为什么要制定这条规则”的唯一正确答案?是“因为语言设计委员会认为,在考虑到许多相互竞争的设计目标时,这是最好的折衷方案”。
这可能不是一个令人满意的答案。要正确回答这个问题,不仅要列出所有这些设计目标及其相对优点,还要描述设计团队每个成员在做出决定时的心理状态,以及描述各种冲突的过程。出现的问题得到了解决。这个决定是十三年前做出的,所以这条路确实很冷。
十三年前的那一天我不在那个房间,但我可以告诉你设计委员会在决定是否允许私有继承时会考虑的因素:
- 对“概念计数”的影响。(用户必须了解多少相关概念才能正确使用该功能?该功能为语言添加了多少新概念?)
- 该功能与 C++ 的相似或不同之处,这可能是有帮助的,也可能是令人困惑的。
- C++ 中该功能的成功。人们在 C++ 中使用它吗?他们正确使用它吗?是否每个 C++ 用户都足够了解此功能以做出正确的选择?
- 与其他语言功能的交互量。这样的功能会以潜在的微妙或令人困惑的方式改变名称查找和重载解析。
- 与相关语言特征的一致性水平。(允许接口不那么容易访问。)
- 实施难度。
- 还有更多的因素。
由于我没有三四个小时的空闲时间来为这个特性写一份关于所有这些因素的详细分析,然后尝试追溯性地对设计团队进行心理分析,我想你会有带着未满足的好奇心生活。
我建议以后不要在 StackOverflow 上问这样的问题。尝试坚持有关具有精确答案的实际代码的特定技术问题。