5.枚举

5.枚举

我们先看一个例子,当我们需要保存一个性别数据时,会考虑使用什么数据类型呢?较早的编程语言中,一般会使用整数,如1表示男、2表示女,但这种数据处理方法必须在严格的约定下才会有效;再进一步,大家会使用常量,如SEX_MALE、SEX_FAMALE等,但使用常量表示特定值也有问题,即我们保存数据的变量依然是整数类型,这样,当我们不使用常量或赋值了有效范围以外的整数时,代码并不会产生任何异常,但数据的含义已经不正确了。

枚举的功能就是,通过直观的标识来表示特定的数据类型及其成员;比如,我们可以通过枚举定义性别类型,如下面的代码。

Enum ESex As Integer
    Unknow = 0
    Male = 1
    Female = 2
End Enum

代码中,我们使用Enum关键字定义了ESex枚举类型,并指定它的成员类型为Integer;然后,我们定义了三个枚举成员,即Unknow、Male和Female,并分别指定了这些成员所对应的数值。实际上,以下代码定义的枚举类型和上面的代码功能是一样的。

Enum ESex
    Unknow
    Male
    Female
End Enum

这是什么情况呢?在定义枚举类型时,其成员都会有一个对应的数值,默认情况下,成员相对应的数值会是Integer类型,并且是从0开始逐渐递增的。

此外,枚举成员的值也可以不从0开始,只要我们设置了第一个成员的值就可以指定开始的数值了;另一方面,在同一个枚举中,我们完全可以定义不同标识,但数值相同的成员,如:

Enum ESex As Integer
    Unknow = 0
    Male = 1
    Man = 1
    Boy = 1
    Mr = 1
    Female = 2
    Woman = 2
    Girl = 2
    Mrs = 2
End Enum

接下来,在代码中,我们如何使用枚举类型呢?实际上,这和使用基本数据类型的方式是一样的,如下面的代码。

Dim tomSex As ESex
tomSex = ESex.Male
Console.WriteLine(tomSex)

代码会显示1,即枚举成员Male对应的数值。

那么,如果我们直接给tomSex设置数值会怎么样呢?答案是,一些正常,即使是超出了ESex枚举类型指定的数值范围也不会出现异常。

但是,我们相信没有人会去自己跟自己过不去,既然我们定义了枚举类型,应该严格使用枚举成员来进行数据的操作,而不是图简单而直接使用数值。

使用枚举另一个需要注意的问题是,为特殊情况做好准备。如我们定义的ESex枚举类型中,定义了一个Unknow成员,其值定义为0;这是一个习惯用法,以保存枚举值可以处理特殊情况,比如,人们想对自己的性别保密的时候。

最后,需要说明的是,枚举属于值类型,所以,在赋值或参数传递等操作时,默认会进行数据的完全复制操作。

目录

  • 前言
  • 1.概述
  • 2.基本数据类型
  • 3.程序流程控制
  • 4.代码组织与封装
  • 5.枚举
  • 6.结构
  • 7.面向对象编程
  • 8.类的继承
  • 9.接口
  • 10.设计模式基础
  • 11.事件与委托
  • 12.泛型
  • 13.异常处理
  • 14.数组与集合
  • 15.字符串与散列算法
  • 16.日期与时间
  • 17.文件系统
  • 18.图形图像
  • 19.网络
  • 20.数据库应用基础
  • 21.创建数据层组件
  • 22.获取系统信息
  • 23.Windows窗体应用代码封装
  • 24.ASP.NET应用开发基础