一周學C#_第6天
枚舉
1 類型
實值型別
l 變數直接包含它們自己的資料
l 局部變數總是放在棧stack中
參考型別
n 變數間接指向它們的資料
n 局部變數指向堆heap中的對象
枚舉enum |
實值型別 |
結構struct |
實值型別 |
類class |
參考型別 |
介面interface |
參考型別 |
數組[]array |
參考型別 |
委託delegate |
參考型別 |
C#規定,類如int、double等內在類,屬於結構,C#稱之為“簡單類型”。
簡單類型與自訂類型的最大區別在於:簡單類型有字面運算式;而自訂類型沒有。
還有,第三種類型:指標。指標只能用在unsafe塊(非安全的程式碼)中。
2 枚舉類型
枚舉類型是一個使用者聲明的實值型別
enum Suit
{
Clubs, Diamonds, Hearts, Spades
}//Suit表示一副牌,有4中花色:梅花,方塊,紅心,黑桃
sealed class Example
{
static void Main()
{
...
Suit lead=Spades;//這裡錯誤
...
Suit trumps=Suit.Clubs;//這樣才正確
...
}
}
枚舉聲明:
可以出現中類聲明的相同地方
包括:名字、存取權限、內在的類型和枚舉的成員。
其中的變數的作用範圍是定義它的枚舉
Suit trumps=Clubs;//這是錯誤的,必須將Clubs限定為Suit的一個成員,如下
Suit trumps=Suit.Clubs;
3 枚舉的注意事項
枚舉值預設類型為int
可以選擇任一一個內在的整數類型
但是不能是字元型
enum Suit:int//內在類型為int,可以省略
{
Clubs,
Diamonds,
Heart=42,//成員預設取值為前一個成員值+1,但是也可以自己賦初始值
Spades,//最後一個成員的分號是可選的
};//結尾分號也是可選的
枚舉類型中的內在變數可以顯式聲明的類型包括:sbyte, byte, short, ushort, int, uint, long,ulong.
如果沒有顯式聲明,預設的類型為int。
成員的取值必須和枚舉聲明的內在類型相同。並且,必須在內在類型的範圍之內。
如果沒有給成員賦值,其取值為前一成員值+1,第一成員預設值為1。
枚舉成員的取值可以是相同值。
最後一個枚舉成員可以用逗號結尾
枚舉成員預設存取權限是public。
4 使用枚舉
枚舉類型隱式的派生自System.Enum
namespace System
{
public abstract class Enum
{
//靜態函數
public static string[] GetNames(Type);
...
//執行個體函數
public override string ToString();
//建構函式
protected Enum();
}
}
Suit trumps=Suit.Clubs;
string[] names=System.Enum.GetNames(trumps.GetType());
...
Console.Write(names[0]);//Clubs
Console.Write(trumps);//Clubs
Console.Write(“{0}”,trumps);//Clubs
Console.Write(trumps.ToString());//Clubs
Console.Write((Suit)24);//24
System.Enum是System命名空間的一個抽象類別。它實作類別一系列的介面:
public abstract class Enum:IComparable,IFormattable,IConvertible
{...}
枚舉隱式派生於System.Enum
System.Enum只能被用來作為一個枚舉類型的隱含基類。
不能顯式的從System.Enum派生自己的類。
不能建立System.Enum類的執行個體。
5 枚舉的操作符
枚舉變數被當做整數變數來看待。
但在大部分情況下不能使用移位操作符。
6 枚舉的轉換
隱式轉換
l 0可以轉為任一enum類型
l 從不拋出錯誤
顯式轉換
l 從enum到enum通過內在類型轉換
l 從enum轉為數實值型別(包含char)
l 從數實值型別(包括char)轉為enum
l 從不拋出錯誤
0可以被轉為任一enum類型,不管此enum類型是否包括0。