c#枚举(enum)究竟是什么?它有什么用处?什么情况下使用?如何使用?
c#中枚举究竟是什么,它有什么用处,什么情况下使用?如何使用?本片文章详细讲解c#中枚举(enum)中的基础知识,主要深入讲解什么是枚举,枚举有什么作用,枚举在什么情况下使用、枚举的规则,枚举的定义以及使用,枚举类型的转换等知识。1、什么是枚举?枚举是一种值类型,它用于声明一组命名的常量,用enum关键字声明。说白了枚举就是一个数据类型,就叫枚举类型,同样也是用来存储数据的。**什么是值类型:
c#中枚举究竟是什么,它有什么用处,什么情况下使用?如何使用?
本片文章详细讲解c#中枚举(enum)中的基础知识,主要深入讲解什么是枚举,枚举有什么作用,枚举在什么情况下使用、枚举的规则,枚举的定义以及使用,枚举类型的转换等知识。
1、什么是枚举?
枚举是一种值类型,它用于声明一组命名的常量,用enum关键字声明。说白了枚举就是一个数据类型,就叫枚举类型,同样也是用来存储数据的。
**什么是值类型:**值类型的变量可以直接存储所包含的值。
2、枚举的作用?
1、枚举能够使代码更清晰,更优雅,它允许使用描述性的名称表示整数值
2、枚举使代码更易于维护,有助于确保给定变量指定合法、期望的值
3、枚举使代码更易输入
3、枚举什么时候使用?
(1)例1:
在案例中,我们需要重复使用到“星期一”到“星期天”这些特定的字符串,我们就可以来定义一个叫做“星期”的枚举。如果不定义成枚举,各位的写法就千奇百怪了,比如“周一”、“星期一”、“Monday”等,这三个表示的是同一天。
(2)例2:
比如说在”切水果“这个游戏中,里面有很多很多的水果,比如说香蕉、苹果、橘子、西瓜……等,这个时候我们呢是不是就可以定义一个叫”水果“的枚举类型,来存储这些水果。
(3)例3:
比如说在王者荣耀游戏中,通常有很多职业,比如说”战士“、”法师“、”射手“……等职业。我们就可以定义一个叫”职业“的枚举类型
其实定义枚举的目的就是为了规范一些数据的值。
4、说明:
1、枚举使用enum关键字来声明,与类同级,枚举本身可以有修饰符,但枚举的成员始终是公开的,不能有访问修饰符,枚举本身的修饰符仅能使用Public和internal。
2、枚举是隐式密封的,不允许作为基类派生子类
3、枚举类型的枚举成员均为静态,且默认值为Int32类型
4、每个枚举成员均具有相关联的常数值,此值的类型就是枚举的底层数据类型,每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内,如果没有明确指定底层数据类型则默认的数据类型是int类型。
5、枚举的符号就是等号前边的,枚举值就是等号后边的
6、枚举类型不能相同,但枚举的值可以相同,也就是枚举前边的符号不能相同,但是后边的值就可以相同
7、枚举最后一个成员的逗号和大括号后面的分号可以省略
8、枚举声明可以显式地声明byte、sbyte、short、ushort、int、uint、long或ulong类型作为对应的基础类型。
9、枚举声明的位置通常是:命名空间的下面, 类的外面, 表示这个命名空间下, 所有的 类都可以访问这个枚举
5、定义格式:
public enum <——枚举名称——>
{
枚举符号=枚举值,//值默认从0开始
枚举符号1=0,//枚举符号不能相同
枚举符号2,//当上一个枚举值指定值以后,后边的枚举没有指定值,那么就会在上一个枚举值的基础上+1
枚举符号3=0,//枚举符号对应的值可以一样
………………………………
}
例子:
//定义枚举,枚举名字为FormBorderStay
enum FormBorderStay
{
/// <summary>
/// 无边框
/// </summary>
none = 1,//=>其中,none就是枚举符号,它代表的整数值是1,也就是说整数1就是枚举符号的值
/// <summary>
/// 固定的单行边框
/// </summary>
FixedSingle = 2,
/// <summary>
/// 固定的三维边框
/// </summary>
Fixed3d = 3,
/// <summary>
/// 固定的对话框样式的粗边框
/// </summary>
FixedDialog = 3,
//枚举的类型不能相同,但是值可以相同
}
class Game
{
private int X;
public FormBorderStay FormBorderStay { get; set; }//设置属性,通过属性来获取枚举值
//通过属性来获取枚举,属性类型为enum类型的FormBorderStay,名字为FormBorderStay
}
}
//外部类
class Program
{
static void Main(string[] args)
{
Game game = new Game();//实例化Game这个对象
game.FormBorderStay = FormBorderStay.Fixed3d;
game.FormBorderStay = FormBorderStay.FixedDialog;
}
}
声明int以外的整形类型的枚举格式:
enum <——枚举名称——>:[类型]
{
枚举符号=枚举值,
枚举符号1=3,
枚举符号2=1,
枚举符号3=0,
………………………………
}
6、枚举的调用格式/获取
[——枚举名称——] <—创建的名称—>=[空格].<选择一个枚举符号>;
7、枚举类型的转换
1、枚举转换int类型/索引
FormBorderStay formborderstay = FormBorderStay.Fixed3d;//调用获取FormBorderStay枚举中的枚举值Fixed3d
Console.WriteLine((int)formborderstay);//打印的时候将他强制转换为int类型就是枚举符号所对应的索引或者说值
2、int类型转换枚举类型
int x = 0;//定义一个int类型的变量来边是索引
Console.WriteLine((FormBorderStay)x);//将int类型的值转换为FormBorderStay枚举类型中的枚举值。前提是你这个枚举中必须有对应的枚举以及枚举值的索引
3、枚举转换为字符串
FormBorderStay formborderstay = FormBorderStay.Fixed3d;//调用获取FormBorderStay枚举中的枚举值Fixed3d
Console.WriteLine(formborderstay);//直接输出的是枚举值
Console.WriteLine(formborderstay.ToString());//而这次输出的是字符串
4、将字符串转换为枚举
string st1 = "星期五";//定义一个字符换并给一个值,跟枚举中的值一样
Console.WriteLine((Week)Enum.Parse(typeof(Week),st1));//通过Enum.Parse的方法将st1中的字符串转换为枚举,为了保险起见,再来一个强制转换,转换为枚举值,typeof是关键字
说明:
(1)Enum:为枚举专门提供的基类
(2)Parse:将一个或多个枚举常数的名称或数字值的字符串表示转化为等效的枚举对象
本片文章记录了我在学习中积累的一些重点知识,更是我的c#学习笔记,希望对各位朋友能有或多或少的帮助,如若各位朋友对本片文章有何见解,还希望能在此留言,纠正我的部分错误。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)