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);

 

posted @ 2021-07-19 17:21  suspect!  阅读(88)  评论(0)    收藏  举报
//增加一段JS脚本,为目录生成使用