没有什么不可以

专注于.NET技术::::

导航

关于枚举的一些概念

1.enum:

enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型均有一种基础类型,此基础类型可以是除 char 类型外的任何整型。允许使用的修饰符有 new 和四个访问修饰符。指定分配给每个枚举数的存储大小的基础类型,可以是除char 类型外的整型之一。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次递增 1。例如:
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,Sat 为 0,Sun 为 1,Mon 为 2,依此类推。枚举数可以具有重写默认值的初始值设定项。例如:
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 1 而不是 0 开始。

2.枚举集合

.NET Framework 提供枚举数作为循环访问一个集合的简单方法。枚举数只读取集合中的数据,无法用于修改基础集合。每一枚举数都基于 IEnumerator 接口,它要求以下成员:
  • Current 属性指向集合中的当前成员。
  • MoveNext 属性将枚举数移到集合中的下一成员。
  • Reset 属性将枚举数移回集合的开始处。Current 被定位于第一个元素的前面

3.简单了解

枚举使你能够指定一组对象,例如:

声明:
public enum Direction {North, East, West, South};

使用:
Direction wall = Direction.North;

这真是个优雅的概念,这也是C#为什么会决定保留它们的原因,但是,为什么Java却选择了抛弃?在Java中,你不得不这么做:

声明:
public class Direction

{

public final static int NORTH = 1;

public final static int EAST = 2;

public final static int WEST = 3;

public final static int SOUTH = 4;

}


使用:
int wall = Direction.NORTH;

         看起来好像Java版的更富有表达力,但事实并非如此。它不是类型安全的,你可能一不小心会把任何int型的值赋给wall而编译器不会发出任何抱怨【译注:你显然不可以这么写:Direction wall = Direction.NORTH;】。

  坦白地说,在我的Java编程经历里,我从未因为该处非类型安全而花费太多的时间写一些额外的东西来捕捉错误。但是,能拥有枚举是一件快事。C#带给你的一个惊喜是—当你调试程序时,如果你在使用枚举变量的地方设置断点,调试器将自动译解direction并给你一个可读的信息,而不是一个你自己不得不译解的数值:

声明:
public enum Direction {North=1, East=2, West=4, South=8};

使用:
Direction direction = Direction.North | Direction.West;

if ((direction & Direction.North) != 0)

//....


如果你在if语句上设置断点,你将得到一个你可读的direction而不是数值5。

【译注:这个例子改一下,会更有助于理解:

声明:
public enum Direction {North=1, East=2, West=4, South=8, Middle = 5/*注意此处代码*/};

使用:
Direction direction = Direction.North | Direction.West;

if ((direction & Direction.North) != 0)

//....


如果你在if语句上设置断点,你将得到一个可读性好的direction(即Middle)而不是数值5】

【作者注:枚举被Java抛弃的原因极有可能是因为它可以用类代替。正如我上面提到的,单单用类我们不能够象用别的概念一样更好地表达某个特性。Java的“如果它可以用类处理,那就不引入一个新的结构”的哲学的优点何在?看起来最大的优点是简单—较短的学习曲线,并且无需程序员去考虑做同一件事的多种方式。实际上,Java语言在很多方面都以简化为目标来改进C++,比如不用指针,不用头文件,以及单根对象层次等。所有这些简化的共性是它们实际上使得编程—唔—简单了,可是,没有我们刚才提到的枚举、属性和事件等等,反而使你的代码更加复杂了】

4.一些参考

A:用反射+特性列出所有的枚举变量及其描述信息,绑定到DropDownList上

posted on 2005-10-26 10:47  哥哥.Net  阅读(825)  评论(0编辑  收藏  举报