Class或Enum将函数参数限制为有效值列表c#

时间:2015-02-19 07:36:03

标签: c# class enums

我们说我有类似的东西: 车辆。
车辆下面我有汽车,卡车和皮卡 在汽车下面我只有宝马和丰田。

现在我想打电话给:

if (NumberOfSeats(Vehicles.Cars.Toyota) {}

所以NumberOfSeats应该仅限于接收宝马和丰田:

public int NumberOfSeats(??) { return 4;}

但如果我打电话,它应该给出编译时错误:

if (NumberOfSeats(Vehicles.Cars.Yamaha) {}

此外,我想为宝马提供一种方法,它将返回一个字符串值(让{'说Name()

我的班级作文是否应该关注枚举,类,继承或组合?

1 个答案:

答案 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");