首页 > 代码库 > C#基础-变量与常量(2)
C#基础-变量与常量(2)
一、枚举类型:
枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。编写与日期相关的应用程序时,经常需要使用年、月、日、星期等日期数据,可以将这些数据组织成多个不同名称的枚举类型。使用枚举类型可以增加程序的可读性和可维护性。同时,枚举可以避免类型错误。
1、在C#中使用关键字enum类声明枚举;
1 enum 枚举名2 {3 List 1= value 1;4 List 2=value 2;5 List 3=value 3;6 }
2、创建一个控制台应用程序通过枚举来判断当前日期是星期几:
1 class Program 2 { 3 enum MyDate //使用enum创建枚举 4 { 5 Sun = 0, //设置枚举值名称Sun,枚举值为0 6 Mon = 1, //设置枚举值名称Mon,枚举值为1 7 Tue = 2, //设置枚举值名称Tue,枚举值为2 8 Wed = 3, //设置枚举值名称Wed,枚举值为3 9 Thi = 4, //设置枚举值名称Thi,枚举值为410 Fri = 5, //设置枚举值名称Fri,枚举值为511 Sat = 6 //设置枚举值名称Sat,枚举值为612 }13 static void Main(string[] args)14 {15 int k = (int)DateTime.Now.DayOfWeek; //获取代表星期几的返回值16 switch (k)17 {18 //如果k等于枚举变量MyDate中的Sun的枚举值,则输出今天是星期日19 case (int)MyDate.Sun: Console.WriteLine("今天是星期日"); break;20 //如果k等于枚举变量MyDate中的Mon的枚举值,则输出今天是星期一21 case (int)MyDate.Mon: Console.WriteLine("今天是星期一"); break;22 //如果k等于枚举变量MyDate中的Tue的枚举值,则输出今天是星期二23 case (int)MyDate.Tue: Console.WriteLine("今天是星期二"); break;24 //如果k等于枚举变量MyDate中的Wed的枚举值,则输出今天是星期三25 case (int)MyDate.Wed: Console.WriteLine("今天是星期三"); break;26 //如果k等于枚举变量MyDate中的Thi的枚举值,则输出今天是星期四27 case (int)MyDate.Thi: Console.WriteLine("今天是星期四"); break;28 //如果k等于枚举变量MyDate中的Fri的枚举值,则输出今天是星期五29 case (int)MyDate.Fri: Console.WriteLine("今天是星期五"); break;30 //如果k等于枚举变量MyDate中的Sat的枚举值,则输出今天是星期六31 case (int)MyDate.Sat: Console.WriteLine("今天是星期六"); break;32 }33 Console.ReadLine();34 }35 }
二、类型转换
类型转换时将一种类型转换为另一种类型。转换可以是隐式转换或者是显示转换
1、隐式转换
源类型 | 目 标 类 型 |
sbyte | short、int 、long、folat、double、decimal |
byte | short、ushort、int、uint、long、float、double或decimal |
short | int、long、ulong、float、double或decimal |
ushort | int、uint、long、ulong、float、double或decimal |
int | long、float、double或decimal |
uint | int、uint、long、float、double或decimal |
char | ushort、int、uint、long、ulong、float、double或decimal |
float | double |
ulong | float、double或decimal |
long | float、double或decimal |
将int类型的值隐式转换成long类型
1 int i=927; //声明一个整形变量i并初始化为927 2 long j=i; //隐式转换成long型
2、显示转换
显示转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要在不存在的隐式转换的类型之间转换,就需要使用显示转换。
源类型 | 目 标 类 型 |
sbyte | byte、ushort、uint、ulong 或 char |
byte | Sbyte 或 char |
short | sbyte、byte、ushort、uint、ulong 或 char |
ushort | sbyte、byte、short 或 char |
int | sbyte、byte、short、ushort、uint、ulong 或 char |
uint | sbyte、byte、short、ushort、int 或 char |
long | sbyte、byte、short、ushort、int、uint、ulong 或 char |
ulong | sbyte、byte、short、ushort、int、uint、long 或 char |
char | sbyte、byte 或 short |
float | sbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimal |
double | sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 decimal |
decimal | sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 double |
显式转换包含所有隐式转换和显式转换,因此总是可以使用强制转换表达式从任何数值类型转换为任何其他的数值类型。
创建控制台应用程序,将double类型的x进行显示类型转换
1 static void Main(string [] age)2 {3 double x=19810927.0112; //建立double类型变量x4 int y=(int)x; //显式转换成变量类型Y5 Console.WriteLine(y); //输出整形变量y6 Coneole.ReadLine();7 }
也可以通过Convert关键字来进行显式类型转换;
创建控制台应用程序,通过Convert关键字进行显式类型转换。
1 double x=19810927.0112; //建立double类型变量x2 int y=Convert.ToInt32(x); //通过Convert关键字转换3 Console.WriteLine(y); //输出整形变量y4 Console.ReadLine();
三、装箱和拆箱
将值类型转换为引用类型的过程叫做装箱,相反,将引用类型转换为值类型的过程叫做拆箱。
1、装箱:装箱允许将值类型隐式转换成引用类型。
声明整形变量i并赋值2008。然后将其复制到装箱对象obj中,最后再改变变量i的值
1 static void Main(string[] args)2 {3 int i = 2008; //声明一个int类型变量i,并初始化为20084 object obj = i; //声明一个object类型obj,初始化值为i5 Console.WriteLine("1.i的值为{0},装箱之后的对象为{1}", i, obj);6 i = 927; //重新将i赋值为9277 Console.WriteLine("2.i的值为{0},装箱之后的对象为{1}", i, obj);8 Console.ReadLine();9 }
将值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值
1、拆箱:拆箱允许将引用类型显示转换为值类型。
声明变量i并赋值为112.然后将其复制到装箱对象obj中。最后进行拆箱操作,将装箱对象obj赋值给整形变量j。
1 static void Main(string[] args)2 {3 int i = 112; //声明一个int类型的变量i,并初始化为1124 object obj = i; //执行装箱操作5 Console.WriteLine("装箱操作:值为{0},装箱之后对象为{1}",i,obj);6 int j=(int )obj; //执行拆箱操作7 Console.WriteLine("拆箱操作:装箱对象为{0},值为{1}", obj, j);8 Console.ReadLine();9 }
拆箱后得到的值类型数据的值与装箱对象相等。在拆箱操作中,要符合类型一制的原则,否则会出现异常
C#基础-变量与常量(2)