从长远来看,创建枚举可以节省大量的时间,减少许多麻烦。使用枚举比使用无格式的整数至少有如下三个优势:

  ● 枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。

  ● 枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。

  ● 枚举使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值。

  public enum FileStates{Begin=1,Pause=2,RollBack=3,Success=4};

  枚举类型都是值类型。System.Enum是一个抽象类(abstract class),所有枚举类型都直接继承自它,当然也同时继承了它的所有成员。所有的值类型都是System.ValueType的后代,枚举类型也不例外,枚举类型直接继承自System.Enum,而System.Enum却又直接继承自System.ValueType的,所以,枚举类型也是System.ValueType的后代。

  值类型都是System.ValueType的后代”,但System.ValueType的后代不全是值类型,System.Enum是的特例!在System.ValueType的所有后代中,除了System.Enum之外其它都是值类型。事实上,我们可以在.NET的源代码中找到System.Enum的声明:

  public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible

  1. 所有枚举类型(enum type)都是值类型。

  2. System.Enum和System.ValueType本身是引用类型。

  3. 枚举类型(enum type)都是隐式的直接继承自System.Enum,并且这种继承关系只能由编译器自动展开。但System.Enum本身不是枚举类型(enum type)。

  4. System.Enum是一个特例,它直接继承自System.ValueType,但本身却是一个引用类型。

  A:枚举类型可以被装箱成System.Enum、System.ValueType、System.Object或者System.IConvertible、System.IFormattable、System.IComparable。

  注意:在.NET 1.1上,枚举类型只能被装箱到System.Enum、System.ValueType、System.Object;而在.NET 2.0上,枚举类型还能被装箱到System.Enum所实现的三个接口:System.IConvertible、System.IComparable、System.IFormattable。对应的装箱操作既可以为隐式的也可以是显式的。

  枚举类型与整数类型有一定的关系。事实上,每一个枚举类型都有与之相对应的整数类型,我们称该整数类型为底层类型(underlying type),默认的情况下使用,.NET使用System.Int32。当然,你可以手动将其指定为其他的整数类型:

  能被指定为枚举的底层类型的只能是如下所列的整数类型:byte, sbyte, short, ushort, int, uint, long, ulong。

  如果你没有手动指定成员的值的话,从上往下看,各成员的值为:0, 1, 2, ...。说罢了,是一个非负整数等差数列,其初值为0,步长为1。例如:

  public enum Alignment

{
Left,    // 0
Center,    // 1
Right    // 2
}