当前位置:  开发笔记 > 编程语言 > 正文

枚举和属性命名冲突

如何解决《枚举和属性命名冲突》经验,为你挑选了2个好方法。

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

enum Day{ Monday, Tuesday, ... }

class MyDateClass
{
   private Day day;

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

由于只有标志枚举应具有多个名称,因此将枚举"Days"命名为非标记枚举的方式.在上面的示例中,您可以对枚举或属性使用"WeekDay"之类的变体.但是在一般情况下没有像这样的好的变化,所以你最终使用像"FooMode"或"BarKind"这样的属性来获得具有Foo和Bar类型的枚举属性的对象.不那么优雅.

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


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

class Vehicle
{
  enum Kind{ Car, Bike }

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

class Meal
{
  enum Kind{ Dessert, MainCourse }

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

在上面的场景中,假设Meal和Vehicle共享相同的命名空间,我不能在其中任何一个类之外移动"Kind"而不分别将它重命名为MealKind和VehicleKind.我喜欢这个样子

myVehicle.Kind = Vehicle.Kind.Car

但这不是guidlines推荐的内容.这里最好的做法是什么?永远不要使用嵌套的公共枚举,而是将它们命名为VehicleKind等?



1> OregonGhost..:

没有冲突.事实上,.NET Framework样式指南鼓励您这样做,例如,如果您的类具有单个属性(无论是枚举还是类),那么您应该将其命名为相同.典型示例是Color类型的Color属性.这很好,除非有两种颜色 - 在这种情况下两者都应该添加一些东西(即BackColor和ForeColor,而不是Color和BackColor).


请注意,当枚举嵌套在声明枚举字段的类型中时,这不起作用,如其他答案中所述.

2> Jon Skeet..:

只要枚举没有嵌套在MyDateClass中,我就不会发现这是一个问题.根据我的经验,拥有一个与它返回的类型同名的属性远非罕见.我会看看我是否可以在框架中找到一些例子......

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

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有