C 列舉型別

2022-04-03 22:14:38 字數 2210 閱讀 2553

enum關鍵字用於宣告列舉,即一種由一組稱為列舉數列表的命名常數組成的獨特型別。每種列舉型別都有基礎型別,該型別可以是除 char 以外的任何整型。列舉元素的預設基礎型別為 int。預設情況下,第乙個列舉數的值為 0,後面每個列舉數的值依次遞增 1。例如:

複製

enum days ;
在此列舉中,sat 為 0,sun 為 1,mon 為 2,依此類推。列舉數可以具有重寫預設值的初始值設定項。例如:

複製

enum days ;
在此列舉中,強制元素序列從 1 而不是 0 開始。

可以給 days 型別的變數賦以基礎型別範圍內的任何值,所賦的值不限於已命名的常數。

enume 的預設值為表示式 (e)0 產生的值。

注意列舉數的名稱中不能包含空白。

基礎型別指定為每個列舉數分配的儲存大小。但是,從enum型別到整型的轉換需要用顯式型別轉換來完成。例如,下面的語句通過使用強制轉換從enum轉換為 int,將列舉數 sun 賦給 int 型別的變數:

複製

int x = (int)days.sun;
將 system.flagsattribute 應用於某個列舉時,如果該列舉包含一些使用按位「或」運算組合的元素,這時您會注意到該屬性在用於某些工具時會影響enum的行為。當使用諸如console類方法、表示式計算器這樣的工具時,可以注意到這些變化。(請參見示例 3)。

可靠程式設計

如果給新版本的列舉賦其他值,或者更改新版本中列舉成員的值,可能引起相關源**的問題。情況通常是:switch 語句中使用了enum值,如果已將其他元素新增到enum型別中,那麼預設值的測試可能意外地返回 true。

如果其他開發人員將使用您的**,您需要提供相關說明,告訴開發人員將新元素新增到任何enum型別時,他們的**應該如何響應。

示例在此例中,宣告了乙個列舉 days。兩個列舉數被顯式轉換為整數並賦給整型變數。

複製

// keyword_enum.cs

// enum initialization:

using system;

public class enumtest

; static void main()

", x);

console.writeline("fri = ", y);}}

輸出

sun = 2

fri = 7

在此例中,使用了基類選項來宣告成員型別是longenum。注意,即使列舉的基礎型別是long,列舉成員仍然必須使用強制轉換顯式轉換為long型別。

複製

// keyword_enum2.cs

// using long enumerators

using system;

public class enumtest

; static void main()

", x);

console.writeline("min = ", y);}}

輸出

max = 2147483648

min = 255

下面的**示例闡釋enum宣告上的system.flagsattribute屬性的使用和效果。

複製

// enumflags.cs

// using the flagsattribute on enumerations.

using system;

[flags]

public enum caroptions

class flagtest

}

輸出

sunroof, foglights

5

注釋注意:如果從 sat=1 中移除初始值設定項,結果將是:

複製

sun = 1

fri = 6

注釋請注意,如果移除flagsattribute,此示例的輸出為:55

C 列舉型別

c 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c 列舉也有缺點,這其中最顯著的莫過於作用域問題 在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例 enum fileaccess fileaccess access read 正確 fi...

c 列舉型別

列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 列舉由int,uint,byte,sbyte,long,ulong,short,ushort這8種基元型別構成基型別,沒有顯式地宣告基礎型別的列舉聲 明意味著所對應...

C 列舉型別

如果乙個變數你需要幾種可能存在的值,那麼就可以被定義成為列舉型別。之所以叫列舉就是說將變數或者叫物件可能存在的情況也可以說是可能的值一一例舉出來。舉個例子來說明一吧,為了讓大家更明白一點,比如乙個鉛筆盒中有一支筆,但在沒有開啟之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就...