本節主要內容包括:數組
枚舉類型全解;spa
位標記應用;.net
枚舉應用規則。線程
Ⅰ、枚舉orm
在哪裏能夠看到枚舉?打開每一個文件的屬性,咱們會看到只讀、隱藏的選項;操做一個文件時,你能夠採用只讀、可寫、追加等模式。blog
在.net中能夠選擇以類的靜態字段來表達這種簡單的分類結構,可是更明智的選擇顯然是--枚舉!繼承
全部的枚舉類型都隱式並且只能隱式的繼承自System.Enum類型,System.Enum類型是引用類型,繼承自System.ValueType的惟一不爲值類型的引用類型。字符串
枚舉類型是值類型,分配於線程的堆棧中,自動繼承於Enum類型,可是自己不能被繼承;Enum類型是引用類型,分配於託管堆中,Enum自己不是枚舉類型,可是提供了操做枚舉類型的公用方法。table
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");class
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方法的執行過程和結果。