C#枚舉(Enum)小結
枚舉是一組命名整型常量。枚舉類型是使用 enum 關鍵字聲明的。
C# 枚舉是值類型。換句話說,枚舉包含自己的值,且不能繼承或傳遞繼承。
聲明 enum 變量
聲明枚舉的一般語法:
enum <enum_name> { enumeration list };
其中,
- enum_name 指定枚舉的類型名稱。
- enumeration list 是一個用逗號分隔的標識符列表。
枚舉列表中的每個符號代表一個整數值,一個比它前面的符號大的整數值。默認情況下,第一個枚舉符號的值是 0.例如:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
實例 下面的實例演示了枚舉變量的用法: 實例 using System; public class EnumTest { enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void Main() { int x = (int)Day.Sun; int y = (int)Day.Fri; Console.WriteLine("Sun = {0}", x); Console.WriteLine("Fri = {0}", y); } } 當上面的代碼被編譯和執行時,它會產生下列結果: Sun = 0 Fri = 5
一個枚舉的關聯值或隱式地、或顯示地被賦值。如果枚舉成員的聲明中具有 constant-expression 初始值設定項,則該常量表達式的值(它隱式轉換為枚舉的基礎類型)就是該枚舉成員的關聯值。如果枚舉成員的聲明不具有初始值設定項,則它的關聯值按下面規則隱式地設置:
如果枚舉成員是在枚舉類型中聲明的第一個枚舉成員,則它的關聯值為零。否則,枚舉成員的關聯值是通過將前一個枚舉成員(按照文本順序)的關聯值加 1 得到的。這樣增加后的值必須在該基礎類型可表示的值范圍內;否則,會出現編譯時錯誤。有關枚舉類型成員關聯值賦值案例,參考下例:
using System; namespace Test { public enum Day : uint //如果不設置數據類型,默認為 int { Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat,Sun} class EnumType { public static void Main(string[] args) { Console.WriteLine(ChooseDay(Day.Sun)); Console.WriteLine(ChooseDay(Day.Mon)); } static string ChooseDay(Day d) { string tmp = string.Empty; switch (d) { case Day.Mon: tmp = string.Format("你選擇一周中的第{0}天(即周一),工作",(uint)d); break; case Day.Tue: tmp = string.Format("你選擇一周中的第{0}天(即周二),工作", (uint)d); break; case Day.Wed: tmp = string.Format("你選擇一周中的第{0}天(即周三),工作", (uint)d); break; case Day.Thu: tmp = string.Format("你選擇一周中的第{0}天(即周四),工作", (uint)d); break; case Day.Fri: tmp = string.Format("你選擇一周中的第{0}天(即周五),工作", (uint)d); break; case Day.Sat: tmp = string.Format("你選擇一周中的第{0}天(即周六),休息", (uint)d); break; case Day.Sun: tmp = string.Format("你選擇一周中的第{0}天(即周日),休息", (uint)d); break; default: tmp = "不合法"; break; } return tmp; } } } 復制代碼 //Execation Result 你選擇一周中的第7天(即周日),休息 你選擇一周中的第1天(即周一),工作 請按任意鍵繼續. . .
調用枚舉
public enum CommunicationState { /// <summary> /// 位置狀態 /// </summary> Unknown = 0, /// <summary> /// 等待用戶登錄 /// </summary> WaitforUser = 1, /// <summary> /// 等待用戶輸入密碼 /// </summary> WaitforPass = 2, /// <summary> /// 等待用戶指令 /// </summary> WaitforCmd = 3, /// <summary> /// 接收數據中 /// </summary> Receiving = 4, /// <summary> /// 斷開連接 /// </summary> Disconnected = 5 }
private CommunicationState m_ComState = CommunicationState.Unknown;
this.m_ComState = CommunicationState.WaitforUser;