【问题标题】:Enum and property naming conflicts枚举和属性命名冲突
【发布时间】:2008-10-17 09:42:07
【问题描述】:

使用具有枚举属性的类时,通常会在属性名称和枚举类型之间发生命名冲突。示例:

enum Day{ Monday, Tuesday, ... }

class MyDateClass
{
   private Day day;

   public Day Day{ get{ return day; } }
}

由于只有标志枚举应该有复数名称,因此将枚举命名为“Days”并不是非标志枚举的方式。在上面的示例中,您可以为枚举或属性使用一些变体,例如“WeekDay”。但在一般情况下,没有像这样好的变化,因此您最终对具有 Foo 和 Bar 类型的枚举属性的对象使用“FooMode”或“BarKind”等属性。没那么优雅。

在这种情况下,您通常如何命名枚举和属性?


感谢您的快速回复。另一个问题:为什么不建议嵌套公共枚举,如果要嵌套公共枚举如何解决命名问题?

class Vehicle
{
  enum Kind{ Car, Bike }

  public Kind Kind{ get{ return ... } }
}

class Meal
{
  enum Kind{ Dessert, MainCourse }

  public Kind Kind{ get{ return ... } }
}

在上面的场景中,鉴于 Meal 和 Vehicle 共享相同的命名空间,如果不分别重命名 MealKind 和 VehicleKind,我就无法将“Kind”移出任何一个类。我喜欢它的样子

myVehicle.Kind = Vehicle.Kind.Car

但这不是指南推荐的。这里的最佳做法是什么?永远不要使用嵌套的公共枚举,而是将它们命名为 VehicleKind 等?

【问题讨论】:

  • 它不会在嵌套场景中工作。然后显然是名称冲突。我什至不认为在这种情况下使用“使用”别名会起作用。
  • 嵌套枚举使代码更长,并且与类密切相关。哦,在你的例子中,你可能想从 Vehicle and Dessert 和 MainCourse 从 Meal 派生 Car and Bike,所以不需要枚举 :)
  • 假设您需要枚举(即种类必须用作值,而不是子类),拥有公共嵌套枚举是否比拥有大量以类名为前缀的枚举更好车辆种类?例如,重命名类时,所有仅属于该类的枚举都必须重命名...
  • 我通常仅在用于内部目的时才使用嵌套枚举,部分原因是嵌套枚举引起的命名冲突,部分原因是如果使用这样的枚举感觉不正确.正如我已经说过的,嵌套意味着紧密耦合,而外部枚举可以重用。

标签: c# .net


【解决方案1】:

没有冲突。事实上,.NET Framework style guide encourages you to do this,例如如果您有一个类具有一个类型的单个属性(无论是枚举还是类),那么您应该将其命名为相同的。典型示例是 Color 类型的 Color 属性。没关系,除非有两种颜色 - 在这种情况下,两者都应该在名称中添加一些东西(即 BackColor 和 ForeColor,而不是 Color 和 BackColor)。

【讨论】:

  • 在我看来,典型的例子是 DbCommand.CommandType 是 CommandType 类型。
  • 请注意,当枚举嵌套在声明枚举字段的类型中时,这不起作用,如其他答案中所述。
【解决方案2】:

只要枚举没有嵌套在 MyDateClass 中,我认为这不是问题。拥有与其返回的类型同名的属性并不少见(根据我的经验)。我看看能不能在框架里找到一些例子……

编辑:第一个示例:DateTimeOffset.DateTime(不是枚举,但这有点无关紧要)

【讨论】:

  • Web 服务发出的类很常见。
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多