枚举
枚举的底层数据类型,默认为int,同时可以设置除char外的所有整型。
枚举本身可以有访问修饰符,但枚举的成员始终是公共的,不能有任何访问修饰符。其中枚举本身的访问修饰符仅能使用public和internal。
枚举的定义可以与类平级,也可以作为类的成员,但不能放在函数中。
枚举类型的本质是什么呢?枚举类型是值类型,并且隐式地继承自System.Enum类型,但这种继承关系只能由编译器生成,不允许手工指定。非常奇妙的事情是,System.Enum本身不是枚举类型,它虽然直接继承自System.ValueType,但本身却是一个引用类型。所以可以这样说,值类型都是派生自System.ValueType,但派生自System.ValueType的却不全是值类型,这个System.Enum类型就是唯一的特例。
标志枚举
- 使用Flag特性修饰
- 枚举成员的值应以2的幂进行赋值
成员常量
默认情况下,第一个枚举值为0,后面每个枚举值递增1,但可以改变。枚举的成员不能相同,但其值可以相同。
enum Week : int
{
Mondy = 5, //5
Tuesday, //6
Wednesday, //7
Thursday = 1, //1
Firday, //2
Staurday, //3
Sunday //4
使用建议
- 如果参数、返回值、变量等类型可以枚举(要考虑到分类的稳定性),则尽量使用枚举
- 枚举的命名一般使用名词或名词组合,简单枚举使用单数,标志枚举使用复数
- 大多数情况下,使用int作为枚举类型,除了以下情况:
-
- 是标志枚举,且标志多于32个时(超过了int类型的取值范围)
-
- 枚举可能被大量且频繁地使用,为了节约空间而使用小于int的类型
-
- 不得不使用其他类型的情况
- 不要在枚举成员中使用“FirstValue、LastValue”这样的命名