c#图解教程_第十章&第十一章_结构和枚举

结构
定义:结构是程序员定义的数据类型,与类非常相似
与类的区别:
- 类是引用类型而结构类型是值类型
- 结构是隐式密封的,这意味它们不能派生
结构是值类型
所有值类型一样,结构类型变量含有自己的数据
- 结构类型的变量不能为null
- 两个结构变量不能引用同一对象
- 可实现装箱和拆箱操作
- 结构体可以实现接口
struct Coordinate{ public int x {get;set;} public int y{get;set;} } //crd是一个局部变量,分配在main函数的内存栈上,存的是Coordinate类型的实例 Coordinate crd = new Coordinate (){ x= 101, y= 101 }; //装箱 object obj = crd ; //将crd 实例copy丢到内存“堆”里去,用obj这个变量来引用堆内存中的crd 实例 //拆箱 Coordinate crd2= (Coordinate)obj;
//实现接口 interface ISpeak{ void Speak(); } struct Student:ISpeak{ public int ID {get;set;} public string Name {get;set;} public void Speak(){ Console.WriteLine($"I'm #{this.ID} student{this.Name}”);
}
}
结构体的构造函数
- 结构体不能显示无参构造函数
- 可以有构造函数,但不允许有析构函数
- 可以设置静态构造函数
struct Coordinate{ public int x {get;set;} →字段是不允许初始化 如x=10; public int y{get;set;} public Coordinate(int x,int y){ this.x =10; this.y = 20; } }
结构体是密封的
无法从它们派生到其他结构
由于结构不支持继承,个别类成员修饰符用在结构成员上将没有意义,因此不能在结构成员声明时使用
结构的作用
对结构进行分配比创建类的实例开销小,所以使用结构代替类有时能提高性能,但要注意装箱和拆箱的高代价
在结构里面定义引用类型的属性,与类没多大区别。新手学习时不熟练使用建议使用类
枚举
定义:与结构一样,枚举是值类型,因此直接存储它们的数据,而不是分开存储成引用和数据
枚举只有一种类型的成员:命名的整数值常量
//默认不设置数值,从整数0开始计算 enum Level{ One, Two, Three }//整数数据按照0,1,2排序 //设置数值,按照上一个数值递增 enum Level{ One = 1, Two, //那么Two和Three 为 2和3 Three }

位标志

常见的转换方法
enum Status{ Excute, Finish, Cancel } //枚举类型转字符串 string result = Status.Excute.ToString(); //枚举类型转整形 int data = (int)Status.Excute; //整形转枚举类型 Status stu = (Status)data; //字符串转枚举类型 string str = "Excute"; Status stu =(Status)Enum.Parse(typeof(Status),str);

浙公网安备 33010602011771号