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);
int i = 0; string Name = Enum.Parse(typeof(Man), i.ToString()).ToString(); Console.WriteLine("我是四大名著之一的:" + Name);
string Name2 = "红楼梦"; int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2)); Console.WriteLine("我是《红楼梦》对应的值序号:" + j);
Console.ReadKey(); } }
}
|
课后作业
1.略