关闭

更好的使用.net 2.0中的枚举类型

1142人阅读 评论(0) 收藏 举报
    使用枚举有诸多好处,比如可以使代码更容易编写、阅读和维护。本文假设您对C/C++的枚举已经有了相当的了解,同时知道.net架构和CLR初步知识,并且知道在合适的地方使用枚举,所以本文仅讨论在.net架构中枚举举有的新特性。
    从CLR开始,枚举类型就变成一个真正面向对象的类型,所有枚举类型均直接继承自System.Enum,后者继承自System.ValueType,System.ValueType最后继承自System.Object。因此,枚举类型属于值类型,但与其他只类型不同,枚举类型不能定义任何方法、属性或事件。正是因此,枚举类型可以使用继承自Object的公共方法,比如有名的ToString()。
    每个枚举在编译时,便一起会将其中每个符号变为类的一个常数字段。例如
    enum Color
    {
          Red,
          Green,
          Blue
    }
    会被编译为
    struct Color : System.Enum
    {
          public const Color Red = (Color) 0;
          public const Color Greed = (Color) 1;
          public const Color Blue = (Color) 2;
    }

    Enum类还提供一系列强大的静态方法,这里介绍几个典型的可以方便我们使用枚举类型的方法。
  
    Enum.Format,函数原型为 [ComVisibleAttribute(true)] public static string Format (Type enumType,Object value,String format) 如果调用 Enum.Format(typeof(Color), 2, "G") 将返回"Blue",Format的好处在可以制定返回的字符串格式,类似于ToString()的格式参数。有的人可能会说,直接在实例上使用ToString()方法不是更好吗,其实这句话里就暗示了Fomat()的好处,不需要枚举实例,可以直接传递枚举值得数值形式。

    Enmu.GetValues,函数原型为[ComVisibleAttribute(true)] public static Array GetValues (Type enumType)   ,返回值为枚举实例的数值数组。调用Enmu.GetValues(type(Color))将得到{0,1,2}。类似的还有Enmu.GerName(Type enumType, Object values)Enmu.GetNames(Type enumType)将返回枚举数值的字符串形式。

    Enmu.IsDefined,函数原型为[ComVisibleAttribute(true)] public static bool IsDefined(Type enumType, Object value),可以确定一个数值对于某个枚举类型是否合法,调用Enmu.IsDefined(typeof(Color), 10)将返回false,因为Color枚举中并没有定义10。

    Enmu.Parse,函数原型为[ComVisibleAttribute(true)]public static Object Parse ( Type enumType, string value, bool ignoreCase ),其中最后一个参数"bool ignoreCase“可以省略,表示是否忽略大小写。这个函数在实际使用中可以起到意想不到的好处,有很高的灵活性,可以转换字符串为枚举类型。调用Enmu.Parse(typeof(Color), "Bule", true)将得到一个Bule枚举实例。如果调用Enmu.Parse(typeof(Color), "Black", true)将会抛出ArgumentExceptiong异常,因为Black在Color中并没有定义。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:58460次
    • 积分:980
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:8篇
    • 译文:0篇
    • 评论:30条
    文章分类
    最新评论
    项目连接