一周学会 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 接口实现的。