CH21_枚举类型


本章目标

  • 掌握枚举的使用

枚举

概述

枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。

C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

语法

1
2
3
4
5
6
7
8
9
enum <enum_name>
{
enumeration list
};

enum <enum_name>:int
{
enumeration list
};

其中,

  • enum_name 指定枚举的类型名称。
  • enumeration list 是一个用逗号分隔的标识符列表。
  • 如果要显示指定枚举的底层数据类型很简单,只需在声明枚举的时候加个冒号,后面紧跟要指定的数据类型(可指定类型有:byte、sbyte、short、ushort、int、uint、long、ulong)。

特点

  • 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
  • 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
  • 枚举都是隐式密封的,不允许作为基类派生子类。
  • 枚举类型的枚举成员均为静态,且默认为Int32类型。
  • 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
  • 枚举成员不能相同,但枚举的值可以相同。
  • 枚举最后一个成员的逗号和大括号后面的分号可以省略

枚举类的方法

案例1:enum,int,string 三种类型之间的互转。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FirstProject
{
public enum Sex
{
男 = 0,
女 = 1
}

class Program
{
static void Main(string[] args)
{
int a = (int)Sex.女;
Console.WriteLine("将枚举类型转换为整型:"+a);

string b = Sex.女.ToString();
Console.WriteLine("将枚举类型转换为字符串型:" + b);

Sex c = (Sex)Enum.Parse(typeof(Sex), "女");
Console.WriteLine("将字符创转换为枚举类型:"+c.ToString());

Sex d = (Sex)1;
Console.WriteLine("将整型转换为枚举类型:" + d.ToString());

Console.ReadKey();
}
}

}

案例2:测试枚举类的各个方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FirstProject
{
enum Man:long //四大名著枚举
{
西游记 = 1,
红楼梦 = 2,
三国演义 = 3,
水浒传 = 0
}

class Program
{
static void Main(string[] args)
{
//输出方式一:
Console.WriteLine("我是四大名著之一的:" + Enum.GetName(typeof(Man), 1)); //西游记(是哪个名著由值获取)

//输出方式二:
string[] array1 = Enum.GetNames(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array1[2]); //红楼梦(是哪个名著由值获取)

//输出方式三:
Array array2 = Enum.GetValues(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array2.GetValue(3)); //三国演义(是哪个名著由值获取)

//输出方式四:
Type t = Enum.GetUnderlyingType(typeof(Man));
Console.WriteLine("我输出的是值类型:" + t); //输出 Int32

//输出方式五:由值获取内容
int i = 0;
string Name = Enum.Parse(typeof(Man), i.ToString()).ToString(); //此时 Name="水浒传"
Console.WriteLine("我是四大名著之一的:" + Name);

//输出方式六:由内容获取值
string Name2 = "红楼梦";
int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2)); //此时 j=2
Console.WriteLine("我是《红楼梦》对应的值序号:" + j);

Console.ReadKey();
}
}

}

课后作业

1.略