我们说我有类似的东西:
车辆。
车辆下面我有汽车,卡车和皮卡
在汽车下面我只有宝马和丰田。
现在我想打电话给:
if (NumberOfSeats(Vehicles.Cars.Toyota) {}
所以NumberOfSeats应该仅限于接收宝马和丰田:
public int NumberOfSeats(??) { return 4;}
但如果我打电话,它应该给出编译时错误:
if (NumberOfSeats(Vehicles.Cars.Yamaha) {}
此外,我想为宝马提供一种方法,它将返回一个字符串值(让{'说Name()
)
我的班级作文是否应该关注枚举,类,继承或组合?
答案 0 :(得分:3)
我猜你在倒退。我的思维方式是在现实世界的对象和软件类之间创建类比(这是我的面向对象思维方式)。
当我考虑现实世界的情景时,世界本身就没有“座位数”这样的东西。这是车辆的财产。汽车有这个属性的公共汽车有这个属性,汽车通常有4(或5)个座位,公共汽车有45等。
所以我将它作为一种自我方法的车辆的财产来实现。这样它会更有意义。如:
public interface IVehicle
{
int NumberOfSeats { get; }
string Brand { get; set; }
}
public class Car : IVehicle
{
public int NumberOfSeats { get; private set; }
public string Brand { get; set; }
public Car(int noofseats, string brand)
{
this.NumberOfSeats = noofseats;
this.Brand = brand;
}
}
Car bmw = new Car(4, "BMW");
Car toyota = new Car(4, "Toyota");
Car qashqai = new Var(7, "Nissan");