您的位置:首页 > 其它

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

2006-05-27 11:24 387 查看
使用枚举有诸多好处,比如可以使代码更容易编写、阅读和维护。本文假设您对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中并没有定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: