一週學會C#(枚舉二)
C#才鳥(QQ:249178521)
4.使用枚舉<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
枚舉隱式派生於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
{
...
}
枚舉(例如Suit)隱式派生於System.Enum。
System.Enum是一個特殊的類,它只能被用作一個枚舉類型的隱含基類。
你不能自己從System.Enum顯式派生自己的類。
你不能創造一個System.Enum的實例。(它的構造函數是protected,並且它是一個抽象類)。
5.枚舉的操作符
· 枚舉變量當作整型變量看待,但在大部分情況下不能使用移位操作符。
6.枚舉的轉換
· 隱式轉換
w 0 可以轉爲任一 enum類型
w 從不拋出錯誤
· 顯式轉換
w 從enum 到enum 通過內在類型轉換
w 從enum 轉爲數值類型(包括char)
w 從數值類型(包括char) 轉爲 enum
w 從不拋出錯誤
0可以被轉爲任一enum類型,不管enum類型包不包括0。
如果你使用Console.WriteLine顯視一個枚舉值,它好像被隱式轉換爲一個字符串。但這是一種錯覺,下面的例子說明了這一點:
enum Suit { Clubs, Diamonds, Hearts, Spades }
Suit trumps = Suit.Clubs;
Console.WriteLine(trumps);//顯視爲Clubs
string s = trumps;//錯誤,trumps不是字符串
Console.WriteLine完成的從enum到string 的類型轉換是通過System.Enum的IFormattable接口實現的。