.Net枚舉類型小結

1.枚舉類型的要點:

(1)類型聲明語法: enum 枚舉名html

(2)枚舉體語法: a.成員名稱 = 整數值,其餘成員名稱,或者其餘成員與整數的表達式  b.成員之間須要用逗號隔開ui

(3)枚舉能夠繼承的類型:byte、sbyte、short、ushort、int、uint、long 或 ulongspa

(4)枚舉多個成員能夠共享一個值.net

(5)枚舉的默認值規則:第一成員沒有顯示設定值,那麼其默認值是0,後面的項依次加1;若是後面的某個成員設定了值,那麼這個值後面的成員是他的值後面依次加13d

(6)得到枚舉成員的字符串值:方法1:枚舉.成員.ToString()   方法2:Enum.GetName()   方法:Enum.GetValues     code

(7)得到枚舉成員的整數值:強制轉化枚舉成員,即:(int)枚舉.成員htm

(8)枚舉通常有兩種用法,一是表示惟一的元素序列,例如一週裏的各天;還有就是用來表示多種複合的狀態。這個時候通常須要爲枚舉加上[Flags]特性標記爲位域.blog

(9)組合多個枚舉狀態的方法:或運算,枚舉成員 | 枚舉成員;從組合狀態中去掉一個元素的方法,用"^"運算符能夠作到,枚舉變量 ^ 枚舉變量的一個成員繼承

2.枚舉類型的優勢:Enums是在棧中而不是堆中創建起來的數值類型,這樣運行的程序須要更少的處理器和內存的資源,你無需使用new來創建一個Enum類型。內存

3.Demo:

   1:      class Program
   2:      {
   3:          public enum Test : int //正確
   4:          {
   5:              ok=10000,
   6:              no=20000
   7:          }
   8:          //public enum Test3 : string//錯誤,枚舉可以繼承的類型:byte、sbyte、short、ushort、int、uint、long 或 ulong    
   9:          //{
  10:          //    ok=10000,
  11:          //    no=20000
  12:          //}
  13:          //public enum Test2 : byte//錯誤,超出byte的範圍
  14:          //{
  15:          //    ok=10000,
  16:          //    no=20000
  17:          //}
  18:          //public enum Test5 : Test//錯誤,不容許整數之外類型繼承
  19:          //{
  20:          //    ok=10000,
  21:          //    no=20000
  22:          //}
  23:          [Flags]
  24:          public enum Test4
  25:          {
  26:              ok,//無值的話,第一個成員默認是0
  27:              no,//值默認爲1
  28:              yes=100,
  29:              yesyes,//值爲101
  30:              nono=yesyes+100,
  31:              okok=yes+yes,
  32:              ook = ok//多個成員能夠共享一個值
  33:          }
  34:          static void Main(string[] args)
  35:          {
  36:              Console.WriteLine((int)Test4.ok);//得到枚舉名稱的整數值只需強制轉換便可
  37:              string str = Test4.ok.ToString();//得到枚舉的名稱字符串,使用ToString()
  38:              Console.WriteLine(str);
  39:              Console.WriteLine(Enum.GetName(typeof(Test4),0));
  40:              Console.WriteLine("*****Enum類方法***************************");
  41:              foreach (var item in Enum.GetValues(typeof(Test4)))
  42:              {
  43:                  Console.WriteLine(item);
  44:                  Console.WriteLine((int)item);
  45:              }
  46:              Console.WriteLine("*****Flags特性*********************************************");
  47:              Test4 tt = Test4.no | Test4.yes;//組合2個成員
  48:              Console.WriteLine(tt);//若是有Flags屬性,值爲:no,yes,沒有Flag屬性,值爲:yesyes
  49:              Console.WriteLine((int)tt);//值爲兩者之和 101=100+1
  50:              tt = tt ^ Test4.yes;//去掉組合中的一個成員
  51:              Console.WriteLine(tt);
  52:              Console.WriteLine((int)tt);//值爲1
  53:              Console.ReadKey();
  54:          }
  55:      }

圖一:有Flags屬性                                                    圖二:無Flags屬性

image                                        image

4.參考資料:

http://www.west263.com/www/info/21458-1.htm

http://www.cnblogs.com/BillySir/archive/2012/02/15/2353395.html

http://www.189works.com/article-48463-1.html

http://gaoling386.blog.163.com/blog/static/54046024201261793458830/

http://blog.csdn.net/aoyux/article/details/173451

http://kb.cnblogs.com/page/42561/

相關文章
相關標籤/搜索