如何在C#中使用私有继承又名C++,为什么不在C#中使用它?

VS1*_*VS1 4 c# c++ inheritance aggregation private-inheritance

我知道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
 };
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法在C#类之间创建一个HAS-A关系,这是我想知道的事情之一 - 怎么样?

另一个奇怪的问题是为什么C#不支持私有(也受保护)继承? - 不支持多个实现继承是正当理由还是其他任何原因?

是否为未来版本的C#计划了私有(和受保护)继承?

是否支持C#中的私有(和受保护)继承使其成为一种更好和广泛使用的语言?

Eri*_*ert 14

现在,有没有办法在C#类之间创建一个HAS-A关系,这是我想知道的事情之一 - 怎么样?

使一个类具有另一个类的字段:

class Car
{
    Engine engine;
}
Run Code Online (Sandbox Code Playgroud)

汽车有发动机.

另一个奇怪的问题是为什么C#不支持私有(也受保护)继承?

你的地下室里有一个盒子.你从来没有把任何东西放进去.有人问你"为什么这个盒子空了?" 你可以给出什么答案,除了盒子是空的,因为没有人把任何东西放进去?

C#不支持私有或受保护的继承,因为没有人实现过该功能并将其发送给客户.默认情况下,免费提供功能.这并不像我们使用私有和受保护的继承来启动C#,然后出于某种充分的理由将它们取出.这些功能从一开始就没有出现过,毫不奇怪,它们仍然不存在.功能不会自我增长.

不支持多个实现继承是有效的原因还是其他任何?

我不明白这个问题.

是否为未来版本的C#计划了私有(和受保护)继承?

没有.

支持C#中的私有(和受保护)继承会使它成为比现在更好的语言吗?

我不这么认为.

我们通常在OOP中看到的继承的许多问题之一是它完全将"是一种" 语义关系与"重用" 机制关系的实现细节混为一谈.私有继承部分解决了这个问题.

有一些情况我真的很想在C#中拥有私有继承; 最近的一个例子是我有一个可以一般构建的数据结构,但我不想向用户公开:

internal class FancyDataStructure<T> {...}
Run Code Online (Sandbox Code Playgroud)

但只有在T为int时才能序列化(原因与讨论没有密切关系.)我想说:

public class SerializableThingy : private FancyDataStructure<int>
Run Code Online (Sandbox Code Playgroud)

相反,我只是做了FancyDataStructure<T>一个嵌套类型SerializableThingy和使用的组成,而不是继承.有一小部分"管道"代码要编写,但结果很好.

我不认为添加功能会为自己付出代价; 它增加了语言的复杂性,以换取避免一些微不足道的管道税的非常小的好处.

支持C#中的私有(和受保护)继承会使它成为比现在更广泛使用的语言吗?

我怎么可能或者其他任何人可能知道这个问题的答案?StackOverflow是一个不好的地方,可以根据反事实来提出需要预测未来的问题.我的建议:

  • 使用您想要的功能实现C#版本.看它是否变得流行.然后你就会知道.
  • 寻找具有心灵能力的人,如果事情现在不同,他们可以预测未来会是怎样的.由于基于反事实的预测通过演绎逻辑的规则自动成立,因此预测将是准确的.

  • @Vijay:嗯,这很容易解决.如果B有一个受保护的字段F并且你想从包含B的D访问它然后从B派生C,让C暴露F,并且让D包含C.现在D可以看到F,没问题."受保护"是用词不当; 没有任何东西实际上是"受到保护"的."受保护"只是"公开",上面覆盖着薄薄的饰面. (2认同)