【发布时间】:2015-02-19 07:36:03
【问题描述】:
假设我有类似的东西:
车辆。
在车辆下方,我有汽车、卡车和皮卡。
下面的车我只有宝马和丰田。
现在我想这样称呼:
if (NumberOfSeats(Vehicles.Cars.Toyota) {}
所以 NumberOfSeats 应该被限制为只接收 BMW 和 Toyota:
public int NumberOfSeats(??) { return 4;}
但是如果我调用它应该会给出编译时错误:
if (NumberOfSeats(Vehicles.Cars.Yamaha) {}
此外,我想有一个 BMW 方法,它会返回一个字符串值(比如说Name())
我的类组合应该查看枚举、类、继承还是组合?
【问题讨论】:
-
将
NumberOfSeats作为Vehicle对象的虚拟属性可以解决您的问题吗? -
你能解释一下你想要达到的目标吗?我认为你需要一个抽象基类
Vehicle和方法NumberOfSeats。如果这是设计问题——programmers 将是一个更好的地方。 -
这看起来像设计味道,也像XY problem。试着描述你想要达到的目标。
-
这并不是枚举的真正用途,我同意 Sriram 的观点,你最好创建一个可以被覆盖的方法(或属性)
-
Tx,我想要达到的真正目的是拥有一个固定的汽车名称列表(不是对象的实例),我想将此固定名称传递给一个方法。所以 NumberOfSeats 在这种情况下不是一个属性(尽管现实世界的对象会有意义)。也许我将不得不重新考虑一下这个问题的措辞。谢谢大家。