C 中的列舉

2021-05-23 13:02:52 字數 2634 閱讀 5000

列舉型別是一種的值型別,它用於宣告一組命名的常數。

(1)列舉的宣告:列舉宣告用於宣告新的列舉型別。

訪問修辭符 enum 列舉名:基礎型別

基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte、sbyte、short、ushort、int、uint、long 或 ulong 型別作為對應的基礎型別。沒有顯式地宣告基礎型別的列舉宣告意味著所對應的基礎型別是 int。

(2)列舉成員

列舉成員是該列舉型別的命名常數。任意兩個列舉成員不能具有相同的名稱。每個列舉成員均具有相關聯的常數值。此值的型別就是列舉的基礎型別。每個列舉成員的常數值必須在該列舉的基礎型別的範圍之內。

示例:public enum timeofday:uint

產生編譯時錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的範圍內。

(3)列舉成員預設值

在列舉型別中宣告的第乙個列舉成員它的默值為零。 

以後的列舉成員值是將前乙個列舉成員(按照文字順序)的值加 1 得到的。這樣增加後的值必須在該基礎型別可表示的值的範圍內;否則,會出現編譯時錯誤。 

示例:public enum timeofday:uint

morning的值為0,afternoon的值為1,evening的值為2。

(4)為列舉成員顯示賦值

允許多個列舉成員有相同的值.

沒有顯示賦值的列舉成員的值,總是前乙個列舉成員的值+1.

示例public enum number

b的值為2,d的值為2.

注意:以上列舉值都不能超過它的基礎型別範圍。否則會報錯.

(5)列舉型別與基礎型別的轉換

基礎型別不能隱式轉換為列舉型別

列舉型別也不能隱式轉換為基礎型別

示例:public enum number

class test

}(6)system.enum型別

system.enum 型別是所有列舉型別的抽象基類,並且從 system.enum 繼承的成員在任何列舉型別中都可用。

system.enum 本身不是列舉型別。相反,它是乙個類型別,所有列舉型別都是從它派生的。

system.enum 從型別 system.valuetype派生

(7)使用列舉型別

using system;

public enum timeofday

class test 

}static void main() 

}    

對於c#中的列舉型別不僅可以提高程式的可讀性,而且可以減少因底層值發生改變而導致的程式改動。另外乙個好處是列舉型別是強型別,以enum型別作為引數傳遞時,接受方法必須有乙個相同的匹配引數;否則編譯器將會報錯。

列舉型別的基礎型別可以是除 char 外的任何整型。如果沒有顯式宣告基礎型別,則使用 int32。如果沒有為enum符號賦之,系統會自動對其分別賦值為0,1,2,3,等等。

如果要將列舉型別賦值給基本型別,則需要顯式強制轉換,如

int seven = (int) week.sunday;  // seven = 7

下面是乙個例程,解釋使用enum怎樣使程式更加清晰易讀:

enum week : int

static string getday(week day)

system.enum的方法

system.enum中三個比較有用的方法是enum.isdefined、enum.parse和enum.getname。

這三個方法都是static method,前兩種方法常一起使用,用來確定乙個值或符號是否是乙個列舉的成員,然後建立它的乙個例項。

isdefined方法有兩個引數:乙個是typeof操作符返回的列舉型別,另乙個表示所測試的字串。如果傳遞乙個數字之作為第二個引數,這是這個方法的第二種形式,用於測試是否有指定的常量。

parse方法選取同樣的引數,並建立列舉型別的乙個例項。 在使用parse方法之前,一定要確保該列舉成員已經存在,否則系統會丟擲乙個異常。

getname方法根據指定值(作為第二個引數傳入)返回列舉中的相應字串。如

string tues = enum.getname(typeof(week), 2);         tues = tuesday

這裡有乙個例項,用來確定是否包含於給定字串值匹配的符號。如果有,則建立此enum的乙個例項,並使用方法getname列印出其中的乙個成員值。

關於enum的tostring方法

這裡有乙個我在csdn上看到的程式,讀懂這個程式,不僅可以很好的理解關於enum的tostring方法,而且可以很好的理解符號和值之間的關係。

using   system;    

class   sample      

;    

public   static   void   main()      

{

C 中的列舉

實際上列舉型別的變數,就是乙個命名常量的集合,它們在c 下使用enum關鍵字進行宣告,每乙個enum型別都自動繼承自system.enum類,所以當我們對列舉型別變數進行操作時可以使用system.enum類下的所有公開方法,可見我們也可以對 列舉型別的變數 稱之為 例項化列舉類的物件。列舉型別其實...

C 中的列舉

列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須能夠表示該列舉中定義的所有列舉數值。列舉宣告可以顯式地宣告 byte sbyte short ushort int uint long 或 ulong ...

C 中的列舉

如果乙個變數只有幾種可能的值,可以定義為列舉 enumeration 型別。列舉就是將所有可能的值一一枚舉出來,變數的值只能在列舉出來的值的範圍內。列舉型別 enumeration 是c 中的一種派生資料型別,它是由使用者定義的若干列舉常量的集合。建立列舉,需要使用關鍵字 enum。列舉型別的一般形...