枚举类型是一种值类型,他用来声明一组命名的常数。
(1)枚举的声明
枚举声明用于声明新的枚举类型。
访问修饰符 enum 枚举名:基础类型
{
枚举成员
}
说明:
基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可显示的声明byte,sbyte,short,ushort,int,uint,long或ulong类型作为对应的基础类型。没有显示声明基础类型的枚举声明意味着所对应的基础类型是int。
(2)枚举成员
枚举成员是该枚举类型的命名常数。
任意两个枚举成员不能具有相同的枚举名称。每个枚举成员具有相关联的常数值,数值类型是对应的基础类型。
示例:
public enum TimeofDay:uint
{
Morning=-3,
Afternoon=-2,
Evenning=-1
}
产生编译错误,原因是常数值-3,-2,-1不在uint范围内。
(3)枚举成员默认值
在枚举成员中声明的第一个成员的默认值是0。以后枚举成员的默认值将是前一个枚举成员(文本顺序)的值加一得到的。
这样得到的枚举成员的值必须在基础类型表示的范围内,否则,回出现编译错误。
示例:
public enum TimeofDay:uint
{
Morning,
Afternoon,
Evening
}
Morning的值是0,Afternoon的值是1,Evening的值是2。
(4)为枚举成员显示赋值
允许多个枚举成员具有相同值。没有显示赋值的枚举成员的值总是前一个成员的值+1。
示例:
public enum Number
{
a=1,
b,
c=1,
d
}
b的值为2,d的值为2。
注意:以上枚举值都不能超过它的基础类型范围,否则回报错。
(5)枚举类型与基础类型的转换
枚举类型不能隐式的转换成基础类型。
基础类型不能隐式转换成枚举类型。
示例:
public enum Number
{
a,
b,
c,
d
}
class Test
{
public static void Main()
{
int i=Number.a;//错误,要强制类型转换(int)Number.a
}
}
(6)System.Enum类型
System.Enum是任何枚举类型的抽象基类,并且从System.Enum继承的成员在任何枚举类型中都可用。
System.Enum本身不是枚举类型。它是一个类类型,所有的枚举类型都从它派生。
System.Enum从类型System.ValueType派生。
(7)使用枚举类型
示例一:
using System;
namespace ConsoleApplicationEnum
{
public enum TimeofDay
{
Morning,
Afternoon,
Evening
}
示例二:
class Program
{
static void Main(string[] args)
{
Greeting(TimeofDay.Morning);
Greeting(TimeofDay.Afternoon);
Greeting(TimeofDay.Evening);
Console.Read();
}
static void Greeting(TimeofDay time)
{
switch (time)
{
case TimeofDay.Morning:
Console.WriteLine("Good morning!");
break;
case TimeofDay.Afternoon:
Console.WriteLine("Good afternoon!");
break;
case TimeofDay.Evening:
Console.WriteLine("Good evening!");
break;
}
}
}
}
using System;
using System.Text;
namespace ConsoleApplicationEnum
{
public enum NoticeType //C#枚举类型实例
{
Notice = 'A',
LabRule = 'H',
HotInformation = 'N',
Column = 'C',
All = '1',
Null = '0'
}
class Program
{
static void Main(string[] args)
{
//新建C#枚举类型
NoticeType noticeType1 = NoticeType.Column;
//把C#枚举类型转换为string d = "Column"
string d = noticeType1.ToString();
//取得C#枚举类型的基数 dd='C'
char dd = (char)noticeType1;
//通过基数取得对应的C#枚举类型 noticeType2 = NoticeType.Notice
//(NoticeType)'A';两种方式都可以
NoticeType noticeType2 = (NoticeType)Char.Parse("A");
//通过名称取得C#枚举类型 noticeType3 = NoticeType.Notice
NoticeType noticeType3 = (NoticeType)Enum.Parse(typeof(NoticeType), "Notice");
NoticeType noticeType4 = (NoticeType)Enum.Parse(typeof(NoticeType), "49");
Console.WriteLine(Convert.ToInt16('A'));
string a = "hello";
byte[] B = Encoding.ASCII.GetBytes(a);
foreach (var bin in B)
{
Console.WriteLine(bin.ToString());
}
Console.WriteLine("noticeType4:" + noticeType4);
Console.Read();
}
}
}
注意:
1,枚举数大小写敏感;
2,枚举不能放在函数中。枚举可以与类平级,也可以作为类的 field,但不能放在函数中。可以加 public 等修饰符。
3,简单枚举包含的值不用于组合,也不用于按位比较。 标志枚举应使用按位 OR 操作进行组合。