如何在c#中使用私有继承,也就是c++,以及为什么c#中没有私有继承

本文关键字:继承 为什么 c++ 也就是 | 更新日期: 2023-09-27 18:15:13

我知道c++支持私有继承,而c#只支持公共继承。我还看到一篇文章说私有继承通常定义类之间的ha关系和某种聚合关系。

编辑:c++的私有继承代码:"汽车有一个引擎"的关系也可以用私有继承来表示:

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#类之间创建一个hasa关系,这是我想知道的事情之一-如何?

另一个奇怪的问题是为什么c#不支持私有(和受保护的)继承?-不支持多个实现继承是一个有效的理由吗?私有(和受保护的)继承是否计划用于c#的未来版本?在c#中支持私有(和受保护的)继承会使它成为一个更好的和广泛使用的语言吗?

如何在c#中使用私有继承,也就是c++,以及为什么c#中没有私有继承

现在,是否有一种方法可以在c#类之间创建一个hasa关系,这是我想知道的事情之一-如何?

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

class Car
{
    Engine engine;
}

汽车有一个发动机。

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

你的地下室里有一个盒子。你从来没有往里面放过东西。有人问你"为什么这个盒子是空的?"除了说盒子是空的因为没人往里面放东西,你还能给出什么答案呢?

c#不支持私有或受保护的继承,因为没有人实现过该特性并将其交付给客户。功能默认情况下不实现,免费。这并不像我们在c#开始时使用私有和受保护的继承,然后由于一些很好的原因将它们从中移除。这些功能一开始就不存在,不出所料,它们现在也没有。特征不会自己生长。

不支持多重实现继承是一个有效的理由吗?

我不明白这个问题。

私有(和受保护的)继承是否计划用于c#的未来版本?

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

我不这么认为。

继承的一个典型问题是,它完全将"是一种"语义关系与"重用实现细节"机制关系混为一谈。私有继承部分地解决了这个问题。

在少数情况下,我真的希望在c#中有私有继承;最近的一个例子是,我有一个数据结构,它通常可以构造,但我不想向用户公开:

internal class FancyDataStructure<T> {...}

,但只有当T是int时才能序列化(原因与讨论无关)。我本想说:

public class SerializableThingy : private FancyDataStructure<int>

我只是让FancyDataStructure<T>成为SerializableThingy嵌套类型,并使用组合而不是继承。虽然需要编写少量的"管道"代码,但效果很好。

我不认为增加这个功能本身是有回报的;它增加了语言的复杂性,以换取一个很小的好处,即避免了一些微不足道的管道税。

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

我或其他任何人怎么可能知道那个问题的答案呢?对于那些需要基于反事实来预测未来的问题,StackOverflow不是一个好地方。我的建议:

  • 实现带有你想要的特性的c#版本。看看它会不会流行起来。然后你就知道了。
  • 找一个有特异功能的人,他可以预测未来会是什么如果现在的事情不同。由于基于反事实的预测根据演绎逻辑的规则自动为真,因此预测将是准确的。

您将以正常的方式创建ha -a关系:让一个类包含另一个类的实例成员。

在c++中,私有继承偶尔用于表示按关系实现的关系,通常是为了简化对父方法/接口的访问。这可能是一个非常罕见的使用,我不会太担心c#不提供它,特别是当组合提供相当类似的功能。