我们上节内容中讲了枚举的基础知识。
知道了枚举的定义语法,
访问修饰符 enum 枚举名{
成员1,成员2
}
枚举定义的位置为类中,在我们当前的程序中就是定义在Program中,和Main同级。
枚举的使用,就是枚举名.成员名。
而且我们知道,我们定义的枚举类型中,对应的成员的基础类型为整形。
并且我们想知道基础类型的值的时候,可以用强制类型转换(int)就是枚举名.成员名来得到。
并且,系统会自动从0开始依次给成员赋值。
枚举成员数据类型可修改
那么既然枚举定义时,给成员默认的数据类型是int型,那么也就是可以给成员定义其他类型,这里直接告诉大家,枚举成员的数据类型可以是所有整形的数值类型,也就是byte、sbyte、short、ushort、int、uint、long、ulong。那么修改成员数据类型的方法是:
enum 枚举名:数据类型
{
成员1,成员2
}
比如说
public enum gender:byte
{
male,female
}
那么修改枚举成员数据类型的意义又是什么呢?我们都知道,声明数据类型的意义在于,告诉计算机响应操作分配多大的空间,但是如果系统内存空间有限,需要我们节省使用的时候,对应程序设计的过程中,我们就要考虑允许操作的最小空间,比如:
我们知道short的表示范围是-32768~32767,byte的表示范围为0~255,如果我们定义枚举的时候,只想让它表示方位,也就是东、西、南、北四个值的时候,显然使用byte就已经足够了,使用short或者int的时候明显的就是在浪费内存空间啦。
所以,我们在编程过程中,要留心变量的声明,给它们合理开辟内存空间。
枚举成员也可以不遵从系统的默认赋值
在我们的基础知识中,我们知道系统会自动从0开始依次给枚举成员赋值,不过毕竟从0开始赋值,不符合我们平时的生活习惯,如果我们用枚举表示一个星期中的7天的话,显然用0表示第一天还是很别扭。所以,其实枚举可以通过我们人工干预,手动修改成员赋值,比如:
public enum week:byte
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
那么我们知道,这样的定义方式,Monday默认值就是1。所以我们可以这样:
public enum week:byte
{
Monday=1,
Tuesday=2,
Wednesday=3,
Thursday=4,
Friday=5,
Saturday=6,
Sunday=7,
}
通过这样的方式我们就可以主动的给枚举成员赋值啦。
我们可以指定每一个枚举成员值,也可以指定部分枚举成员的值
上个例子中,由于一周7天是连续的,所以我们一次性用1~7从周一定义到周日,这也就是一次性指定每一个枚举成员值。但是在我们编写代码过程中,也会出现指定部分枚举成员值的情况。
比如,我们在写一个员工管理系统的工种功能,里面有人事、技术、主管、前台、总监,于是我们可以这样定义
public enum employees:byte
{
hr,
tech,
super,
fdesk,
directore
}
也许我们在编写过程中,事先约定,人事、主管、总监是必然职位,所以先编号,但是其他职位功能还没有编写,所以没有编号,就出现了这种情况:
这时候我们输出成员中的tech和fdesk的时候发现,teck是2、fdesk是3。这是怎么回事?
其实我们仔细观察可以发现,程序会在我们赋值的基础上,如果发现某个成员没有赋值,就会在上一个已经赋值的值的基础上,给这个成员增1赋值,也就是上一个成员值是1,那么这个成员值就是2。但是我们发现,系统自动给teck赋值为2,但是我们的super是我们手动赋值的2,这也就说明,在我们枚举类型的成员中,可以存在值相同的情况。
我们可以在定义枚举的成员的时候,直接将其他枚举成员值赋值给它
我们在定义方向的枚举的时候可以这样:
public enum direction :byte{
east=1,
south=2,
west=3,
north=4,
}
但是在程序的编辑过程中,我们有方向细化的要求,于是再次定义一个细节方向:
public enum detail_direction :byte{
east=1,
south=2,
west=3,
north=4,
southeast=5,
northeast=6,
southwest=7,
northwest=8
}
这时候,显然再次定义东南西北的代码是重复的,所以我们可以这样:
也就是,当两个枚举有数据关联的时候,可以用一个已知的枚举来直接定义另一个枚举成员值
领取专属 10元无门槛券
私享最新 技术干货