【摘】枚举设计

【本文自】http://msdn.microsoft.com/zh-cn/library/ms229058(VS.80).aspx

                 http://msdn.microsoft.com/zh-tw/library/sbbt4032.aspx

枚举设计

枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性。枚举分为简单枚举和标志枚举两种。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举应使用按位 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
            }
            
不要对开放集(如操作系统版本)使用枚举。

向已提供的枚举添加值会中断现有代码。有时可以接受这种做法,但不应在可能出现这种情况的场合设计枚举。

不要定义供将来使用的保留枚举值。

某些情况下,您可能认为为了向提供的枚举添加值,值得冒可能中断现有代码的风险。还可以定义使用其值的新的枚举和成员。

避免公开只有一个值的枚举。
一定不要将 sentinel 值包括在枚举中。

Sentinel 值用于标识枚举中的值的边界。通常,sentinel 值用于范围检查,它不是一个有效的数据值。下面的代码示例定义一个带有 sentinel 值的枚举。

public enum Furniture
            {
            Desk,
            Chair,
            Lamp,
            Rug,
            LastValue   // The sentinel value.
            }
            
一定要在简单枚举中提供一个零值。

如果可能,将此值命名为 None。如果 None 不适合,请将零值赋给最常用的值(默认值)。

考虑将 System.Int32(大多数编程语言的默认数据类型)用作枚举的基础数据类型,除非出现以下任何一种情况:
  • 枚举是标志枚举,且您有 32 个以上的标志或者期望在将来有更多的标志。

  • 基础类型需要与 Int32 不同,以便易于与期望不同大小的枚举的非托管代码进行互操作。

  • 较小的基础类型可以节省大量空间。如果期望枚举主要用作控制流的参数,其大小就不太重要。如果出现下面的情况,大小节省可能会很重要:

    • 期望枚举被用作非常频繁地实例化的结构或类中的字段。

    • 期望用户创建枚举实例的大型数组或集合。

    • 预计要序列化大量枚举实例。

一定要以名词或名词词组的复数来命名标志枚举。简单枚举应以单数的名词或名词词组命名。
不要直接扩展 System.Enum。

一些编译器不允许扩展 Enum,除非间接地使用生成枚举的语言特定的关键字来进行扩展。

部分版权所有 2005 Microsoft Corporation。保留所有权利。

部分版权所有 Addison-Wesley Corporation。保留所有权利。

有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。

请参见


 

 

转载于:https://www.cnblogs.com/feima-lxl/archive/2008/09/16/1292087.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值