枚举和匹配属性的 C# 命名约定

标签 c# .net enums naming-conventions

我经常发现自己实现了一个类,它维护某种自己的状态属性作为枚举:我有一个 Status 枚举和一个 Status 类型的 Status 属性。我应该如何解决这个名称冲突?

public class Car
{
  public enum Status
  {
    Off,
    Starting,
    Moving
  };

  Status status = Status.Off;

  public Status Status // <===== Won't compile =====
  {
    get { return status; }
    set { status = value; DoSomething(); }
  }
}

如果 Status 枚举对于不同的类型是通用的,我会把它放在类之外,问题就会得到解决。但 Status 仅适用于 Car,因此在类外声明枚举没有意义。

在这种情况下,您使用什么命名约定?

注意:这个问题在 this question 的回答评论中进行了部分辩论。 .因为这不是主要问题,所以它没有得到太多关注。

编辑:Filip Ekberg 建议针对“状态”的特定情况使用 IMO 出色的解决方法。然而,我很想阅读枚举/属性名称不同的解决方案,如 Michael Prewecki 的回答

EDIT2(2010 年 5 月):我最喜欢的解决方案是将枚举类型名称复数化,正如 Chris S 所建议的那样。根据 MS 指南,这应该仅用于标志枚举。但我越来越喜欢它了。我现在也将它用于常规枚举。

最佳答案

“关闭”、“开始”和“移动”的定义就是我所说的“状态”。当您暗示您正在使用“状态”时,它就是您的“状态”。所以!

public class Car
{
  public enum State
  {
    Off,
    Starting,
    Moving
  };

  State state = State.Off;

  public State Status
  {
    get { return state ; }
    set { state= value; DoSomething(); }
  }
}

如果我们从上面提到的您想要使用“Type”这个词的地方再举一个例子,比如在这种情况下:

public class DataReader
{
    public enum Type
    {
        Sql,
        Oracle,
        OleDb
    }

    public Type Type { get; set; } // <===== Won't compile =====

}

你真的需要看看枚举和枚举之间的区别,对吧?但是在创建框架或谈论架构时,您需要关注相似性,好吧,让我们找到它们:

当某物被设置为状态时,它被定义为“事物”状态

示例:汽车的状态为运行状态、停止状态等。

你想在第二个例子中实现的是这样的:

myDataReader.Type = DataReader.Database.OleDb

您可能认为这与我一直向其他人宣扬的内容相反,您需要遵循一个标准。但是,您正在遵循一个标准! Sql 案例也是一个特定案例,因此需要一个稍微特定的解决方案。

但是,枚举可以在您的 System.Data 空间中重复使用,这就是模式的意义所在。

另一种使用“类型”的情况是“动物”,其中类型定义了物种。

public class Animal
    {
        public enum Type
        {
            Mammal,
            Reptile,
            JonSkeet
        }

        public Type Species{ get; set; }

    }

这是遵循一种模式,您不需要特别“知道”这个对象,也没有指定“AnimalType”或“DataReaderType”,您可以在您选择的命名空间中重新使用枚举。

关于枚举和匹配属性的 C# 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/495051/

相关文章:

c# - 能够通过 Tag 属性查找 WinForm 控件

c# - 特定区域怎么画

c# - 字典的 WCF 反序列化,其中枚举类型是关键

c# - UseExceptionHandler 不会捕获任务异常?

c# - 通过 C# 确定本地组的成员

c# - Entity Framework 灵活缓存

.Net - session 外观和业务代表之间有什么区别?

.net - 用于验证十六进制字符串的正则表达式

c - 重新定义;先前的定义是 'typedef' 错误

c# enum equals() 与 ==