如果我需要一个类对象来拥有某个属性,我们称之为“ type ”。
我希望类型为“轮式”或“nonWheeled”。如果将车辆类的实例设置为轮换属性,我想要该属性还有两个其他属性之一,例如“twoWheeled”或“fourWheeled”。
我尝试使用以下枚举来执行此操作:
private enum wheeledTypes {
twoWheeled,
fourWheeled
}
private enum Wheels
{
a = wheeledTypes.twoWheeled,
b = wheeledTypes.fourWheeled,
c = nonWheeled
}
但是你可以看到,然后我得到三种类型(a / b / c,我不想要)。我只想要a / b,或者轮式/非轮式,轮流轮流可以有两种类型。
编辑:如果使用了类,您可能希望它们本身具有属性,构造函数,方法等。我不想要这个。我只是想将车辆设置为轮式(两个/四个)或非轮式车辆。轮式和非轮式不应具有其他性能。这就是为什么我认为枚举是合适的。也许我错了!
答案 0 :(得分:1)
你应该上课,如下:
class Vehicle { }
class NonWheeledVehicle : Vehicle { }
class WheeledVehicle : Vehicle
{
internal enum WheelTypes { TwoWheeled, FourWheeled }
}
答案 1 :(得分:0)
你会想要这样的东西:
public enum WheelType
{
TwoWeeled,
FourWeeled
}
public class Vehicle
{
}
public class WheeledVehicle : Vehicle
{
public WheelType WheelType { get; set; }
}
然后,Vehicle
是您的non-wheeled
车型,而WheeledVehicle
是您的Vehicle
具有特定WheelType
。
答案 2 :(得分:0)
使用类
class Vehicle {
}
class Wheeled : Vehicle {
}
class NonWheeled : Vehicle {
}
class TwoWheeled : Wheeled {
}
class FourWheeled: Wheeled {
}
答案 3 :(得分:0)
枚举不是用作属性,而只是用作常量值的表示,例如整数,字符串e.t.c
您想要的是通过继承适用。
std::enable_if
或者根据您的需要,您可以将轮子的数量保持为@ rory.ap建议的枚举
答案 4 :(得分:0)
只是一个建议,但为什么不简单地让属性可以为空?这样,如果它为空,它是非轮式的,你仍然可以直接与枚举进行比较
enum Wheels{
twoWheeled,
fourWheeled
}
class AnyClass
{
public Wheels? Wheels{get;set;} //the question marks makes the property nullable
}
var a= new AnyClass{Wheels = Wheels.twoWheeled};
if(a.Wheels == null){} //unwheeled
if(a.Wheels.HasValue){} //wheeled
if(a.Wheels==Wheels.twoWheeled){} //direct check on specific type also works
我个人也想添加一个暴露属性的接口。这样,您就可以在该界面上创建扩展方法,例如static bool HasWheels(this IWheels wheelsObject)