枚舉類型概述
枚舉類型使用 enum 關鍵字聲明阱高。是值類型赚导,但不能定義任何方法、屬性赤惊、事件吼旧。(PS. 可以使用“擴展方法”模擬向枚舉類型添加方法)
每個枚舉類型都從 System.Enum 派生,后者從 System.ValueType 派生未舟,而 System.ValueType 從 System.Object 派生圈暗。
枚舉類型定義的符號是常量值掂为,在編譯時,會用對應的數(shù)值替換引用了枚舉類型的符號员串。這意味著運行時可能不需要定義了枚舉類型的程序集勇哗。
在構(gòu)建系統(tǒng)的時候,創(chuàng)建一組符號名來對應已知的數(shù)值會很方便昵济,例如智绸,以下 Days 類型定義了一組符號,每個符號都標識一周中的一天访忿。 該變量只能存儲七個有意義的值:
internal enum Days
{
Sunday, // 星期天
Monday, // 星期一
Tuesday, // 星期二
Wednesday, // 星期三
Thursday, // 星期四
Friday, // 星期五
Saturday // 星期六
}
默認情況下瞧栗,第一個元素的值會設置為 0 ,其余的按照 n+1 遞推海铆。根據(jù)需要迹恐,我們也可以改變第一個元素的初始值,如:
internal enum Days
{
Sunday = 101, // 星期天
Monday, // 星期一 = 102
Tuesday, // 星期二 = 103
Wednesday, // 星期三 = 104
Thursday, // 星期四 = 105
Friday, // 星期五 = 106
Saturday // 星期六 = 107
}
枚舉值也不一定是連續(xù)的卧斟,如:
internal enum Days
{
Sunday = 107, // 星期天
Monday = 101, // 星期一
Tuesday = 109, // 星期二
Wednesday = 108, // 星期三
Thursday = 106, // 星期四
Friday = 102, // 星期五
Saturday = 105 // 星期六
}
用來保存枚舉值的存儲類型默認是 int殴边,我們也可以改成其它基元類型(byte, sbyte, short, ushort, uint, long, ulong)。如將 Days 枚舉類型的實際存儲值設置為 byte 珍语,可以這么寫:
internal enum Days : byte
{
Sunday, // 星期天
Monday, // 星期一
Tuesday, // 星期二
Wednesday, // 星期三
Thursday, // 星期四
Friday, // 星期五
Saturday // 星期六
}
這么做的好處是可以節(jié)省內(nèi)存锤岸,但要注意每一個值必需在其范圍內(nèi)。C#編譯器為了簡化本身的實現(xiàn)板乙,要求只能指定基元類型名稱是偷,如果指定 Int32,會顯示以下錯誤信息:
應輸入類型 byte募逞、sbyte蛋铆、short、ushort放接、int刺啦、uint、long 或 ulong纠脾。
枚舉類型的好處
其實玛瘸,在實際使用中我們也可以使用 0 表示 星期天, 1 表示 星期一乳乌,以此類推捧韵,如下:
public const int Sunday = 0;
public const int Monday = 1;
public const int Tuesday = 2;
public const int Wednesday = 3;
public const int Thursday = 4;
public const int Friday = 5;
public const int Saturday = 6;
不過,使用枚舉類型而不使用數(shù)值類型有以下好處:
- 枚舉類型使代碼變得更容易編寫汉操、閱讀和維護再来,在 Visual Studio 中,IntelliSense 能向開發(fā)者顯示有意義的符號名稱,開發(fā)者不用費心去記住每個數(shù)值代表的含義芒篷;
- 枚舉類型是強類型搜变,明確指定哪些值是變量的有效值。