小编Iva*_*ski的帖子

如何在双层次结构中正确表示继承?

假设我们有两个继承层次结构,其核心:

Car -> SportsCar -> SuperCar
Run Code Online (Sandbox Code Playgroud)

Engine -> TurboEngine -> FormulaOneEngine
Run Code Online (Sandbox Code Playgroud)

汽车有发动机.SportsCar有TurboEngine和SuperCar有FormulaOneEngine.问题是如何在C#中正确表示这一点.假设我们这样做:

class Car {
  Engine Engine;
  int HeadLamps;
}
class SportsCar: Car {
  TurboEngine TurboEngine;
  int Ailerons;
}
class SuperCar: SportsCar {
  FormulaOneEngine FormulaOneEngine;
  int FlyingSaucers;
}
Run Code Online (Sandbox Code Playgroud)

这解决了问题,但它看起来很丑陋!例如,SuperCar现在有三个成员,它们通常指向同一个实例(如果不这样做则更糟糕!)并且它看起来也没必要.对于4级,5级或更多级别的深层次结构,这看起来非常难看:

SuperCar.Engine
SuperCar.SportsEngine
SuperCar.FormulaOneEngine
Run Code Online (Sandbox Code Playgroud)

理想情况下,所有类型的汽车应该只有一个名为Engine的成员,但它应该是不同的类型,具体取决于汽车:

Car.Engine
SportsCar.Engine //of type TurboEngine
SuperCar.Engine //of type FormulaOneEngine
Run Code Online (Sandbox Code Playgroud)

此外,这应该支持多态,所以我可以

List<Car> x = ...
x.Add(myCar);
x.Add(mySportsCar);
x.Add(mySuperCar);
foreach(Car c in x)
{
  x.Engine ...
}
Run Code Online (Sandbox Code Playgroud)

所以使用"新"成员就出局了.我还希望能够直接调用每种引擎类型的特定方法:

class Engine { int Capacity; }
class TurboEngine: Engine { …
Run Code Online (Sandbox Code Playgroud)

c# oop

3
推荐指数
1
解决办法
176
查看次数

标签 统计

c# ×1

oop ×1