枚舉類(lèi)型概述
枚舉類(lèi)型使用 enum 關(guān)鍵字聲明。是值類(lèi)型,但不能定義任何方法、屬性、事件。(PS. 可以使用“擴(kuò)展方法”模擬向枚舉類(lèi)型添加方法)
每個(gè)枚舉類(lèi)型都從 System.Enum 派生,后者從 System.ValueType 派生,而 System.ValueType 從 System.Object 派生。
枚舉類(lèi)型定義的符號(hào)是常量值,在編譯時(shí),會(huì)用對(duì)應(yīng)的數(shù)值替換引用了枚舉類(lèi)型的符號(hào)。這意味著運(yùn)行時(shí)可能不需要定義了枚舉類(lèi)型的程序集。
在構(gòu)建系統(tǒng)的時(shí)候,創(chuàng)建一組符號(hào)名來(lái)對(duì)應(yīng)已知的數(shù)值會(huì)很方便,例如,以下 Days 類(lèi)型定義了一組符號(hào),每個(gè)符號(hào)都標(biāo)識(shí)一周中的一天。 該變量只能存儲(chǔ)七個(gè)有意義的值:
internal enum Days
{
Sunday, // 星期天
Monday, // 星期一
Tuesday, // 星期二
Wednesday, // 星期三
Thursday, // 星期四
Friday, // 星期五
Saturday // 星期六
}
默認(rèn)情況下,第一個(gè)元素的值會(huì)設(shè)置為 0 ,其余的按照 n+1 遞推。根據(jù)需要,我們也可以改變第一個(gè)元素的初始值,如:
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 // 星期六
}
用來(lái)保存枚舉值的存儲(chǔ)類(lèi)型默認(rèn)是 int,我們也可以改成其它基元類(lèi)型(byte, sbyte, short, ushort, uint, long, ulong)。如將 Days 枚舉類(lèi)型的實(shí)際存儲(chǔ)值設(shè)置為 byte ,可以這么寫(xiě):
internal enum Days : byte
{
Sunday, // 星期天
Monday, // 星期一
Tuesday, // 星期二
Wednesday, // 星期三
Thursday, // 星期四
Friday, // 星期五
Saturday // 星期六
}
這么做的好處是可以節(jié)省內(nèi)存,但要注意每一個(gè)值必需在其范圍內(nèi)。C#編譯器為了簡(jiǎn)化本身的實(shí)現(xiàn),要求只能指定基元類(lèi)型名稱(chēng),如果指定 Int32,會(huì)顯示以下錯(cuò)誤信息:
應(yīng)輸入類(lèi)型 byte、sbyte、short、ushort、int、uint、long 或 ulong。
枚舉類(lèi)型的好處
其實(shí),在實(shí)際使用中我們也可以使用 0 表示 星期天, 1 表示 星期一,以此類(lèi)推,如下:
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;
不過(guò),使用枚舉類(lèi)型而不使用數(shù)值類(lèi)型有以下好處:
- 枚舉類(lèi)型使代碼變得更容易編寫(xiě)、閱讀和維護(hù),在 Visual Studio 中,IntelliSense 能向開(kāi)發(fā)者顯示有意義的符號(hào)名稱(chēng),開(kāi)發(fā)者不用費(fèi)心去記住每個(gè)數(shù)值代表的含義;
- 枚舉類(lèi)型是強(qiáng)類(lèi)型,明確指定哪些值是變量的有效值。