【发布时间】: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,所以不需要枚举 :)
-
假设您需要枚举(即种类必须用作值,而不是子类),拥有公共嵌套枚举是否比拥有大量以类名为前缀的枚举更好车辆种类?例如,重命名类时,所有仅属于该类的枚举都必须重命名...
-
我通常仅在用于内部目的时才使用嵌套枚举,部分原因是嵌套枚举引起的命名冲突,部分原因是如果使用这样的枚举感觉不正确.正如我已经说过的,嵌套意味着紧密耦合,而外部枚举可以重用。