我有一个控制课程运作方式的枚举。这个枚举只适用于类,因此感觉它应该是嵌套的。但是,该类需要枚举的实例作为成员,理想情况下,它的名称与枚举相同。当然,这是不可能的。
我主要关注的是提供干净清晰的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;
}
}
}
答案 0 :(得分:2)
将枚举放在课堂外似乎更常见。将其保留在内意味着每次设置模式时最终都需要指定ClassName.Enum:
var mma = new MultiModeActionFacadeObject(fastAction, accurateAction, intermediateAction)
{
Mode =
MultiModeActionFacadeObject.ActionMode.Accurate
};
此外,由于任何一种方式都有效,我不认为这是一个明确的“答案”。我会在你原来的问题上添加评论,但这需要50多个代表:)