每个枚举都继承至System.Enum,System.Enum继承至System.ValueType,System.ValueType又继承至System.Object

枚举是值类型,枚举不能有方法,属性和事件。
枚举其实就是定义一组常量字段的结构体。

编译器对待枚举类似如下代码
struct Color : System.Enum
{
    public const Color Red = (Color) 0;
    public const Color Red = (Color) 1;
    public const Color Red = (Color) 2;
    public const Color Red = (Color) 3;
}


1.GetUnderlyingType
//返回枚举类型实例值的基础类型
static Type GetUnderlyingType(Type enumType);
//枚举类型实例值的基础类型就是这个枚举索引的类型
//枚举类型实例值的基础类型为byte的枚举
enum Color : byte
{
    Red,
    Green,
}

2.Format
//format参数:G字符串,D十进制,X十六进制,默认是字符串
public static string Format(Type enumType,object value,string format);
//相比ToString()方法的优势:Format可以传递枚举的数值形式
//output "Blue"
Console.WriteLine(Enum.Format(typeof(Color),2,"G"));

3.GetValues
//获得枚举类型中所有符号
static Array GetValues(Type enumType);
Color[] colors = (Color[])Enum.GetValues(typeof(Color));
foreach(Color c in colors)
{
    Console.WriteLine("{0,5:D}\t{0:G}",c);
}
//output
//0  Red
//1  Green

4.GetName,GetNames
//返回数字的字符串表达形式
public static string GetName(Type enumType,object value);
//返回该枚举类型的所有数字的字符串表达形式
public static string[] GetName(Type enumType);

5.Parse
//查询字符串符号对应的数值,ignoreCase参数表示是否区分大小写
public static object Pares(Type enumType,string value,bool ignoreCase);
//0
Color c = (Color) Enum.parse(typeof(Color),"Red",true)

6.IsDefined
//表示每个枚举的类型是否合法
public static IsDefined(Type enumType,int value);
public static IsDefined(Type enumType,string value);


标记枚举

规则:只有当枚举中定义的每一个值是 2 的幂或所定义值的组合时,该枚举才可以显示 FlagsAttribute 属性。

定义
[Flags,Serializable]
public enum WindowStyle
{
    MINIMUM_BUTTON = 1,
    MAXIMUM_BUTTON = 2,
    CLOSE_BUTTON = 4,
    //等价:ALL_BUTTON = MINIMUM_BUTTON | MAXIMUM_BUTTON | CLOSE_BUTTON
    ALL_BUTTON = 7,
}

WindowStyle styles = WindowStyle.MINIMUM_BUTTON | WindowStyle.MAXIMUM_BUTTON;
//output"MINIMUM_BUTTON,MAXIMUM_BUTTON"
Console.WriteLine(styles.ToString());

posted on 2008-09-19 01:01  qy  阅读(289)  评论(0编辑  收藏  举报