枚举提供了为强类型成员所用的常量值集合并且改进了代码可读性。枚举既可以是简单的也可以是标记。简单的枚举包含了没有在位比较操作中被组合或被使用的值。而标记枚举则是通过使用位比较操作关键字 OR 而有意被组合的。通过使用位比较操作关键字 AND 还可以对标记枚举的组合值进行检查。

下列指导方针描述了枚举设计时的最佳实践。

为强类型参数、属性,以及呈现值集合的返回值而使用枚举,
赞成使用枚举来替代静态常量。

下列代码范例示范了错误的设计。

public static class BadFurnishings
{public static int Table = 1;public static int Chair = 2;public static int Lamp = 3;
}

下列代码范例示范了应该在静态常量空间中被使用的枚举。

public enum GoodFurnishings
{Table,Chair,Lamp
}
不要为开放的集合(如操作系统版本号)而使用枚举。

为已经被承载的枚举添加值能够破坏现有的代码。虽然在有些时候这样做是可以被接受的,但是你还是不应该在与此相同的情况下设计一个枚举。

不要定义为了将来的使用而被扩展的枚举值。

在有些情况下你可能会决定为被承载的枚举中添加值,但是这样做存在着可能破坏现有代码的风险。但是你同样可以定义一个新的枚举和成员来与它的值一起运作。

避免公开地暴露只有一个值的枚举。
不要在枚举中包括哨位值。

哨位值被用来对枚举值的分界进行识别。通常一个哨位值是在范围检查中被使用并且不是一个有效的数据值。下列代码范例定义了一个包含哨位值的枚举。

public enum Furniture
{Desk,Chair,Lamp,Rug,LastValue   // 这就是哨位值。
}
在简单的枚举中提供一个为零的值。

如果可能,把值命名成 None。如果名称 None 不太适合,就把零值指派到大多数公共地被使用的值中(默认时是这样)。

考虑把 System.Int32(在大多数编程语言中的默认数据类型)当作枚举的基本数据类型来使用,除非符合下列情况中的任何一种:
  • 枚举是一个标记枚举,并且你有多于 32 个的标记或是在将来还会有更多标记的情况下。
  • 基本类型需要不同于 Int32 才能够更容易地与非托管代码进行互操作,除非是不同尺寸的枚举。
  • 一个更小的基本类型将会导致实质性的空间储存。如果你期望一个枚举被主要用来作为一个流向控件的参量,那么就可以稍微调整一下尺寸的变化。另外,尺寸储存还有可能是有意义的:

    • 你期望这个枚举在一个频繁被例示的结构或类中当作一个字段被使用。
    • 你期望用户创建庞大的枚举实例数组或集合。
    • 你期望一个庞大数量的枚举实例能够被序列化。
以复数名词或名词短语来命名标记枚举。简单的枚举应该是以单数名词或名词短语来命名的。
不要直接对 System.Enum 进行扩展。

有些编译器不允许你对 Enum 进行扩展,除非你在生成枚举的时候间接地使用了特定的语言关键词。

转载于:https://www.cnblogs.com/Laeb/archive/2007/01/29/633849.html

.NET 指南:枚举的设计相关推荐

  1. [ISUX译]iOS 9人机界面指南(二):设计策略

    [ISUX译]iOS 9人机界面指南(二):设计策略 雪糕 2015.11.09 文章索引 2.1 设计原则(Design Principles) 2.1.1 美学完整性(Aesthetic Inte ...

  2. 视频教程-板绘生存指南-原画设计

    板绘生存指南 高校原画设计专业内训师.八年行业经验与线上线下教学经验.参与<无尽战区>.<无尽战区><天下3>.<神武2><枪魂>等项目 陈 ...

  3. 交流伺服系统设计指南_交流设计

    交流伺服系统设计指南 软件设计至关重要. 它是应用程序的基础. 就像蓝图一样,它为所有背景的聚会提供了一个通用平台. 它有助于理解,协作和发展. 设计不应仅视为开发的要素. 它不应该仅仅存在于开发人员 ...

  4. delphi5开发人员指南_非设计人员的网页设计开发人员指南

    delphi5开发人员指南 I created my first website as a school project when I was 14. The task was simple: cre ...

  5. 谷歌云指南_Google材料设计指南的10个重要要点

    谷歌云指南 重点(Top highlight) Google is one of the biggest and most influential players in the tech space, ...

  6. Framer 指南:从设计到编程、组件及其它

    原文:blog.framer.com/framer-tuto- 作者:Wojciech Dobry 翻译:Jun 看下面这两个很 cool 的原型,它们都是使用 Framer 制作的.是不是也想做一个 ...

  7. neo4j图形算法综合指南_网页设计中色彩使用的综合指南

    neo4j图形算法综合指南 There is a lot of material about color to be found online. But none of us has the time ...

  8. 『ACM-算法-枚举法』信息竞赛进阶指南--枚举方法

    你以为枚举是一个一个的找? 还真是 你以为枚举都是for循环? 还真是 但你真的会枚举吗?组合型枚举,指数型枚举,排列型枚举?难道你只会线形枚举? 你可太菜了! // 递归实现指数型枚举 vector ...

  9. Swift3.0P1 语法指南——枚举

    原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...

最新文章

  1. 更新ADT到Android L的方法
  2. 华北计算机研究无人机,飞马D200无人机在华北某环境地调项目中的应用案例
  3. 简明高效的 Java 并发编程学习指南
  4. slope one 推荐算法python 代码_java和python实现一个加权SlopeOne推荐算法
  5. 积分背后的数字货币,你真的会玩吗?
  6. smarty2和smarty3
  7. asp系统转换php系统时间函数,window_Asp常用通用函数之生成时间的整数,'函数名:GetMyTimeNumber()' - phpStudy...
  8. 微信公众平台客户端调试工具
  9. Linux Cgroups详解(二)
  10. mysql5.7 dmg安装
  11. libvlc.java_java – LibVlc android无法加载库
  12. N63043-郝子轩-第一周
  13. 【光线追踪系列十四】蒙特卡洛积分与重要性采样
  14. 电脑黑屏按什么键恢复?只需要3个键就可以解决黑屏
  15. pcie台式网卡无法开热点
  16. 5年随访显示TNF拮抗剂治疗银屑病关节疗效持久
  17. 阿里 P7 前端高级工程师,都需要掌握哪些技术栈?做为学习方向上的借鉴和参考
  18. 企业破产重整网_企业破产重整的基本流程是怎样的?
  19. 《战争论》第六篇《防御》的主要原则
  20. OceanBase 3.2.3 发版|HTAP引擎全面升级,TPC-H性能10倍提升~

热门文章

  1. php的环境怎么配置文件,php环境下所有的配置文件以及作用
  2. xshell连接不了服务器显示22端口,win10安装redis,xshell无法连接22端口
  3. mysql insert delay_解析mysqldump的delay-insert选项
  4. oracle分页的使用,oracle中分页的实现方式.rownum的使用
  5. java fx配置_JavaFX系列-配置开发环境
  6. www服务器提供的第一个信息页面,第14章WWW服务
  7. php如何包含html模板,php html模板中怎么使用类似include的功能?
  8. 使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones)
  9. Kdtree(K-dimension tree)学习
  10. 【camera-radar】自动驾驶相机-毫米波雷达融合方案综述