当我知道我有一组有限的不同选项时,使用枚举或一组类?

dev*_*ium 4 c# java oop inheritance enums

假设我已经定义了以下类:

public abstract class Event {
    public DateTime Time { get; protected set; }

    protected Event(DateTime time) {
        Time = time;
    }
}
Run Code Online (Sandbox Code Playgroud)

你更喜欢这个:

public class AsleepEvent : Event {
    public AsleepEvent(DateTime time) : base(time) { }
}

public class AwakeEvent : Event {
    public AwakeEvent(DateTime time) : base(time) { }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

public enum StateEventType {
    NowAwake,
    NowAsleep
}    

public class StateEvent : Event {
    protected StateEventType stateType;

    public StateEvent(DateTime time, StateEventType stateType) : base(time) {
        stateType = stateType;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么?我通常更倾向于第一种选择,但我无法解释原因.使用一个而不是另一个是完全相同还是有任何优势?也许用第一种方法更容易添加更多"状态",尽管在这种情况下,我100%肯定我只想要两种状态:现在醒来,现在睡着了(它们表示一个人醒来,一个人睡着的时刻).

Bri*_*new 6

我更喜欢第一个.您可以将方法和行为附加到类中,并从枚举中常见的开关/案例模式转向真正的多态(以及它的好处,即维护 - 添加新案例等).