一周学会C#(枚举二)
C#才鸟(QQ:249178521)
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
{
...
}
枚举(例如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接口实现的。