C# 复杂变量类型——枚举(Enum)

China☆狼群 提交于 2020-01-14 08:39:20

除了简单的变量类型外,C# 还提供了三个较复杂的变量:枚举、结构和数组

C# 枚举(Enum):

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

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

枚举类型是一种值类型,定义好的值会存放到栈中。

枚举类型在定义时使用 enum 关键字表示,枚举类型的定义与类成员的定义是一样的,或者直接定义在命名空间中。

注意:不能直接将枚举类型定义到方法中。

声明枚举的一般语法:

访问修饰符 enum 变量名:数据类型
{1,2,
	...
	值n
}

其中:

<1>、访问修饰符

与类成员的访问修饰符一样,省略访问修饰符也是代表使用 private 修饰符的。

例如:

public enum test
{= 0,= 1
}

<2>、数据类型

枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为 int。
当然,也可以指定其他基本类型。
枚举的基本类型可以是:byte、sbyte、short、ushort、int、uint、long 和 ulong

例如:

enum location:byte
{
	north = 1,
	south = 2,
	east = 3,
	west = 4
}

<3>、值1,值2,…

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。
如果不需要系统自动为枚举值指定值,也可以直接为其赋一个整数值。

例如:

enum Days 
{
    Mon=71, 
    tue=61, 
    Wed=51, 
    thu=41, 
    Fri=51, 
    Sat=61, 
    Sun=71
}

实例一:创建类 EnumTest,在该类中定义一个枚举类型存放教师职称(助教、讲师、副教授、教授)。在 Main 方法中分别打印出每个枚举值对应的字节值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace project_05_枚举
{
    public enum Title : byte //直接定义在命名空间中
    {
        助教,
        讲师,
        副教授,
        教授
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("{0}的默认编号是{1}", Title.助教, (byte)Title.助教);
            Console.WriteLine("{0}的默认编号是{1}", Title.讲师, (byte)Title.讲师);
            Console.WriteLine("{0}的默认编号是{1}", Title.副教授, (byte)Title.副教授);
            Console.WriteLine("{0}的默认编号是{1}", Title.教授, (byte)Title.教授);
        }
    }
}

结果是:

助教的默认编号是0
讲师的默认编号是1
副教授的默认编号是2
教授的默认编号是3
请按任意键继续. . .

从上面的执行效果可以看出,由于没有给枚举值设置初始的整数值,初始的整数值是从 0 开始的,并且依次递增 1。

实例二:将助教的值设置为 1,将副教授的值设置为 4。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace project_05_枚举
{
    public enum Title : byte //直接定义在命名空间中
    {
        助教 = 1,
        讲师,
        副教授 = 4,
        教授
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("{0}的编号是{1}", Title.助教, (byte)Title.助教);
            Console.WriteLine("{0}的编号是{1}", Title.讲师, (byte)Title.讲师);
            Console.WriteLine("{0}的编号是{1}", Title.副教授, (byte)Title.副教授);
            Console.WriteLine("{0}的编号是{1}", Title.教授, (byte)Title.教授);
        }
    }
}

结果是:

助教的编号是1
讲师的编号是2
副教授的编号是4
教授的编号是5
请按任意键继续. . .

从上面的执行效果可以看出,当助教的值为 1 时,讲师的值为 2,而由于副教授的值被设置为 4,则教授的值为 5。

因此,每个枚举值的整数值都是前一个枚举值的整数值加 1。

over.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!