C#枚舉類(lèi)型概述(一)

枚舉類(lèi)型概述

枚舉類(lèi)型使用 enum 關(guān)鍵字聲明。是值類(lèi)型,但不能定義任何方法、屬性、事件。(PS. 可以使用“擴(kuò)展方法”模擬向枚舉類(lèi)型添加方法)

每個(gè)枚舉類(lèi)型都從 System.Enum 派生,后者從 System.ValueType 派生,而 System.ValueTypeSystem.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)型,明確指定哪些值是變量的有效值。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 《CLR via C#》作者Jeffrey Richter的話來(lái)說(shuō),“不理解【引用類(lèi)型】和【值類(lèi)型】區(qū)別的程序員將...
    LH_晴閱讀 1,770評(píng)論 0 3
  • 一、枚舉類(lèi)型枚舉類(lèi)型也成為枚舉,它是一種創(chuàng)建數(shù)值類(lèi)型的機(jī)制,這種值類(lèi)型的可能取值是預(yù)定義的,而對(duì)于其中的每個(gè)可能取...
    CarlDonitz閱讀 982評(píng)論 0 1
  • C# 類(lèi)型體系包含下列3種類(lèi)型: 3-1值類(lèi)型-------------簡(jiǎn)單值類(lèi)型:數(shù)值類(lèi)型、布爾類(lèi)型、字符類(lèi)型、...
    蕭非子閱讀 1,010評(píng)論 0 50
  • 目錄本次給大家介紹的是我收集以及自己個(gè)人保存一些.NET面試題第二篇簡(jiǎn)介1.接口2.您在什么情況下會(huì)用到虛方法或抽...
    寒劍飄零閱讀 1,995評(píng)論 0 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,765評(píng)論 18 399