是否可以限制C#中的公共枚举值?

森帕雷德

我目前正在编写一个由展览组成的旅游软件程序。在任何给定点,展览对象处于ExhibitStates枚举定义的四个状态之一:

private enum ExhibitState { Ready, Active, Complete, Inactive };

对于将要设置展览的开发人员,只有两个“开始”状态,我希望他们可以从以下状态中进行选择:

public enum StartingExhibitState { Ready, Inactive };

目前,我已经对其进行了设置,以便在初始化后,展览将立即设置其状态以匹配其起始状态,如下所示:

        switch (startingState) {
            case StartingExhibitState.Ready:
                SetState(ExhibitState.Ready);
                break;
            case StartingExhibitState.Inactive:
                SetState(ExhibitState.Inactive);
                break;
        }

我发现自己今天在想这是否是最佳做法。是否有更好的方法来限制哪些枚举选项是公共的,哪些是私有的?还是最好简单地将两个枚举分开?

非常感谢您的参与。

法比奥

如果您创建第二个枚举-通过设置方法的签名将非常清楚地说明您的意图

public enum ExhibitState 
{ 
    Inactive = 0,
    Active = 1,
    Ready = 2,
    Complete = 3
};

public enum InitialStates 
{ 
    Inactive = ExhibitState.Inactive,
    Ready = ExhibitState.Ready
};

public void SetInitial(InitialStates state)
{
    SetState((ExhibitState)state);
}

如果您走得更远,则可以添加编译器帮助,以防止将错误的值传递给该方法。

public sealed class InitialState
{
    public static readonly InitialState Initial = new InitialState(ExhibitState.Initial);

    public static readonly InitialState Ready = new InitialState(ExhibitState.Ready);

    public ExhibitState State { get; }            

    private InitialState(ExhibitState state)
    {
        State = state;
    }
}

构造函数private可防止从其他位置实例化类。
标记为的类,sealed以防止派生和更改其行为。

然后你的方法看起来像

public void SetInitial(InitialState start)
{
    SetState(start.State);
}  

// use it
SetInitial(InitialState.Initial);
SetInitial(InitialState.Ready);

除非您更改InitialState类的代码,否则什么都不能传递

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章