10. 结构和枚举
1、结构:
结构体 (struct) 是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。结构体最主要的作用就是封装,做成你想要的数据类型。封装的好处就是可以再次利用。
(1)结构是使用 struct 关键字定义的,与类相似,都是可以包含数据成员和函数成员的数据结构;
(2)结构是值类型,他在栈中分配空间;而类是引用类型,他在堆中分配空间,栈中保存的只是引用;
(3)需将结构声明到命名空间的下面,类的外面。表示这个命名空间下的所有类都可以访问这个结构;
(4)结构体在实例化时,可以 new 实例化对象,也可以不 new 。不 new 时,则成员变量必须声明为 public 。
2、初始化结构成员:
一、使用参数化构造函数,即使用 new 关键字;
二、在声明结构后分别访问成员。
1 //例:创建一个职员的结构体,对他的名字、年龄等进行封装。以后进行调用的时候可以实例化不同的张三、李四等再次利用。 2 public struct Clerk 3 { 4 //声明变量 5 public string name; //不能直接对其赋值 6 public int age; 7 public string department; 8 public char gender; 9 public static string str = null; //而静态变量可以初始化 10 } 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 //分别访问成员来初始化结构成员 16 Clerk zs = new Clerk (); //实例化 17 zs.name = "张三"; 18 zs.gender = '男'; 19 zs.age = 29; 20 zs.department = "人力部"; 21 Console.WriteLine("姓名:{0}\t性别: {1}\t年龄:{2}\t部门:{3}",zs.name,zs.gender,zs.age ,zs.department ); 22 Console.ReadKey(); 23 } 24 }
3、枚举
(1)枚举能使代码更加清晰,他允许使用描述性的名称表示整数值;
(2)枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值;
(3)枚举使用 enum 关键字来声明,与类同级。枚举可以在结构中被调用;
(4)枚举就是一个变量类型。本质也是一个“类”,继承 System.Enum ;
(5)枚举项,本质就是这个特殊类的字段,类型就是值类型;
(6)枚举项,如果起“序号”,可以只给第一项起序号即可,系统可以自动递增:。
4、结构跟枚举的区别:
通俗的说,结构就是定义一些变量的集合,在后面使用的时候对它的变量进行重新赋值。而枚举就是一个变量,给这个变量多种赋值,在后面使用的时候取得这个变量的某种赋值。
5、枚举与字符串相互转换方法:
一、枚举转字符串:如 myEnumName.ToString();或 Conver.ToString(myEnumName);
二、(枚举类型)Enum.Parse(typeof(枚举类型),要转换的字符串)//将字符串转换成枚举类型。
1 //例1:创建枚举 2 public enum Gender 3 { 4 男, 5 女, 6 不男不女=3, 7 } 8 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //引用枚举 14 Gender zsGender = Gender.女; 15 Console.WriteLine(zsGender); 16 17 //转换为整型 18 Console.WriteLine((int )zsGender); 19 20 //int转换为枚举 21 int myint = 0; 22 Console.WriteLine((Gender)myint); 23 24 //字符串转换成枚举 25 string mystr = "3"; 26 Console.WriteLine((Gender)Enum.Parse(typeof(Gender),mystr)); 27 Console.ReadKey(); 28 } 29 }
1 //例2:新建枚举 2 public enum HeroState 3 { 4 //可以给枚举类型添加序号,未添加时默认为从0开始的序号 5 walking=20, 6 runing=40, 7 jumping=60, 8 attack=80, 9 hurt = 100, 10 dead 11 } 12 class Program 13 { 14 static void Main(string[] args) 15 { 16 HeroState hs = HeroState.hurt; 17 //数值类型的转换 18 int intNum = Convert.ToInt32(hs); 19 Console.WriteLine("枚举输出为:{0}",hs); 20 Console.WriteLine("转换为数值输出为:{0}",intNum); 21 Console.ReadKey(); 22 } 23 }