本节主要内容包括:
枚举类型全解;
位标记应用;
枚举应用规则。
Ⅰ、枚举
在哪里可以看到枚举?打开每个文件的属性,我们会看到只读、隐藏的选项;操作一个文件时,你可以采用只读、可写、追加等模式。
在.net中可以选择以类的静态字段来表达这种简单的分类结构,但是更明智的选择显然是--枚举!
所有的枚举类型都隐式而且只能隐式的继承自System.Enum类型,System.Enum类型是引用类型,继承自System.ValueType的唯一不为值类型的引用类型。
枚举类型是值类型,分配于线程的堆栈中,自动继承于Enum类型,但是本身不能被继承;Enum类型是引用类型,分配于托管堆中,Enum本身不是枚举类型,但是提供了操作枚举类型的公用方法。
public enum week : int { sun = 7, mon = 1, tue, wed, thur, fri, sat, weekend = sun } a.类型转换:因为枚举类型本质上是证书类型的集合,因此可以与整数类型进行相互的类型转换,但是必须是显式的。
int i = (int)week.fri; week j = (week)3;
或者用Parse方法来间接完成。 week w = (week)Enum.Parse(typeof(week),"2");
b.与字符串的映射:
包括ToString实例方法和Parse静态方法。
c.不同枚举的相互转换: 显示转换,如
OtherWeek i = OtherWeek.mon;
week today = (week)i;
d.与其他引用类型转换:
Enum继承自--ValueType,Icomparable,IFormattable,IConvertible.
因此,可以显式转换以上类型,和System.Object、System.Enum.
e.常用方法:
GetNames,获取枚举中符号名称数组;
GetValues,获取枚举中所有符号数组;
IsDefined,判断符号或者整数是否存在于枚举中;
GetUnderlyingType,返回枚举实例的声明类型。
Ⅱ、位枚举
带[Flags]特性来标记的枚举。FlagsAttribute特性的作用是将枚举成员处理为位标记,而不是孤立的常数。
a.Enum.IsDefined方法不能应对位枚举成员,可以用该数值与枚举成员进行“位与”运算,结果不为0则表示该变量中包含该枚举成员,如 if ((test & Color.Red) !=0) b.Flags特性将影响ToString、Parse和Format方法的执行过程和结果。