首页 > 代码库 > 《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)

《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)

本节主要内容包括:

  枚举类型全解;

  位标记应用;

  枚举应用规则。

Ⅰ、枚举

  在哪里可以看到枚举?打开每个文件的属性,我们会看到只读、隐藏的选项;操作一个文件时,你可以采用只读、可写、追加等模式。

  在.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方法的执行过程和结果。   

 

  

 

  

 

《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)