嵌套的枚举风格和惯例

时间:2015-06-30 20:23:35

标签: c# convention

我有一个控制课程运作方式的枚举。这个枚举只适用于类,因此感觉它应该是嵌套的。但是,该类需要枚举的实例作为成员,理想情况下,它的名称与枚举相同。当然,这是不可能的。

我主要关注的是提供干净清晰的API。我看到的两个选项是:

嵌套枚举并将实例成员或枚举本身命名为“不完美”的东西。

将枚举放在类之外,这种类型但不会真正污染命名空间,并可能降低发现能力。 (现在写这个,让我觉得发现能力可能不是一个问题,因为只有一个使用点,一个属性)。

此类案件是否有公认的惯例?这是一个说明用例的片段:

public class MultiModeActionFacadeObject : IAction
{
    public enum ActionMode // enum only applies to this class
    { 
        Fast,
        Accurate,
        Intermediate
    }

    private readonly IAction _accurate, _fast, _intermediate;

    internal MultiModeActionFacadeObject(IAction fastAction, IAction accurateAction, IAction intermediateAction)
    {
        _fast = fastAction;
        _accurate = accurateAction;
        _intermediate = intermediateAction;

    }

    // preference would be to call this member ActionMode, but obviously members can't share names
    // although I believe this could be accomodated, outside of static members, by some changes to 
    // qualification requirements. That's not the concern here though.
    public ActionMode Mode { get; set; } 

    public void DoWork(object onThis)
    {
        switch (Mode)
        {
            case ActionMode.Fast:
                _fast.DoWork(onThis);
                break;
            case ActionMode.Accurate:
                _accurate.DoWork(onThis);
                break;
            case ActionMode.Intermediate:
                _intermediate.DoWork(onThis);
                break;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

将枚举放在课堂外似乎更常见。将其保留在内意味着每次设置模式时最终都需要指定ClassName.Enum:

var mma = new MultiModeActionFacadeObject(fastAction, accurateAction, intermediateAction)
            {
                Mode = 
                    MultiModeActionFacadeObject.ActionMode.Accurate
            };

此外,由于任何一种方式都有效,我不认为这是一个明确的“答案”。我会在你原来的问题上添加评论,但这需要50多个代表:)