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是一个不好的地方,可以根据反事实来提出需要预测未来的问题.我的建议:
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |