【问题标题】:Best practices naming convention for const Enum avoiding circular definitionconst Enum 的最佳实践命名约定避免循环定义
【发布时间】:2013-03-25 04:20:22
【问题描述】:

这有点像duplicate question,但没有真正的解决方案。

所以我们开始吧。假设我有:

public enum Color
{
    Red,
    Blue,
    Green
}

public class BlueUnicorn
{
    private const Color Color = Color.Blue;
}
  1. “对大多数 Enum 类型使用单数名称,但对作为位字段的 Enum 类型使用复数名称。”取自Microsoft's Enumeration Type Naming Guidelines检查!

  2. “考虑赋予属性与其类型相同的名称。”取自Microsoft's Names of Type Members 检查!

  3. 根据 Resharper Check!

  4. 的说法,我应该使用常量而不是只读的

但是我得到一个编译器错误。不过,这很奇怪,没有智能。 “BlueUnicorn.Color”常量值的评估涉及循环定义。

我觉得我在这里遇到了一个会议裂缝。根据最佳实践命名约定,该字段应命名为什么?

【问题讨论】:

  • 我可以建议将枚举或 BlueUnicorn const 的 Color 重命名为 ColorChoice 吗?
  • @Kane:这样做的原因是什么?我觉得不合适。
  • 这有点偏题了——尽管有 Resharper 的建议,但对于任何非自然常量的 public,我会使用 readonly 而不是 const。 (例如一天或从不改变的某事)。原因: const 被复制而不被引用。因此,如果您上面的代码在 ClassLibrary A 中,并且 exe B 引用 A,并且您构建,Color.Blue 值将被复制到 exe B。这意味着如果您发布更改 const 值的类库的新版本为绿色,您的 exe 将继续使用蓝色,直到您重新编译它为止。
  • (虽然我想你可能会争辩说 BlueUnicorn 的 Color.Blue 一个自然常数:P
  • @JMarsch:他的常量是私有的。

标签: c# enums naming-conventions


【解决方案1】:

您可以按照自己的方式命名该字段。要解决编译错误,只需在Color.Blue前面添加枚举的命名空间即可。

【讨论】:

  • @Grant:不幸的是,是的。但这实际上是一个错误,因为它不是多余的。
【解决方案2】:

你不是在约定俗成的裂缝中(顺便说一句,很好!)。约定 (2) 不适用于属性,而不是字段或常量。因此,您可以将其命名为 UnicornColor

作为旁注,我很欣赏这可能不是您的真实代码(除非您真的正在编写 Unicorn 模拟器!),但在我看来,拥有 BlueUnicorn 类是不对的.拥有一个基于该类中的特定常量定义的类似乎太具体了——Color 肯定是Unicorn 类的属性吗?

我不知道这是否适用于你的真实代码,但可能是你的设计有点错误,问题永远不会出现?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 2012-02-19
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多