第9章 使用枚举和结构创建值类型
  zOE2xWkB8BXt 2023年11月02日 59 0

9.1 C#有两种数据类型,值类型和引用类型。除了基本数据类型,C#还支持两种值类型,枚举和结构。

*枚举类型可以理解为自定义的数据类型,基元类型int是所有整数的集合,包含所有整数,枚举类型是自己定义的一个集合,包含自己定义的元素。

9.1.1声明枚举类型

关键字 enum,后跟大括号,括号内用逗号分隔

enum Season {spring,sunmmer,fall,winter};
Season AA = Season.spring;
Console.Write(AA);//输出spring
string CC= AA.ToString();//使用ToString方向显示转化枚举类型值
Console.Write(CC);//输出spring
Season? BB = null;

9.1.2使用枚举类型

Season 是类型名,枚举类型只有赋值之后才能使用,

也可以用修饰符?创建可空枚举变量,将null赋值给枚举类型变量。

Season AA = Season.spring;此处必须写Season.spring,不能写spring,每个枚举定义的字面值名称都只有该枚举类型的作用域。不同的枚举类型可以包含同名的字面值。

适合整数变量的许多标准操作符也适用于枚举类型变量,bitwise和shift除外

9.1.3选择枚举类型的字面值

枚举内部的每个元素都对应一个整数值,默认第一个元素对应0,以后的每个整数递增1.

enum Season {spring,sunmmer,fall,winter};
Season AA = Season.fall;
Console.Write((int)AA);//输出3
enum Season {spring=1,sunmmer,fall,winter};
Season AA = Season.fall;
Console.Write(AA);//输出3

枚举的多个字面值可以对应同一个基础数值。

enum Season {spring=1,sunmmer,fall,autumn=fall,winter};
Season AA = Season.autunm;
Console.Write(AA);//输出3

枚举类型变量也可以执行数学运算。但运算结果溢出时,运行时会解释成对应的整数值。

9.1.4选择枚举类型的基础类型

声明枚举类型时,枚举字面值默认是int型,但是也可以让枚举类型基于8种基础整数值的任何一种:byte,sbyte,short,ushort,int,uint,long,ulong.

例如 enum Season : short { spring,summer,fall,winter}

这样可以节省内存。

9.2使用结构

类是引用类型,总是在堆上创建,结构是值类型,在栈上存储,只包含极少数数据的类可以创建成结构struct,可以节省内存。

结构包含自己的字段、方法和构造器(但不能主动声明默认构造器)。

9.2.1声明结构

和类一样,大多数时候都不要在结构中声明公共字段,因为无法控制它的值。使用私有字段并为结构添加构造器和方法来初始化它的值和处理字段。

struct Time
{
	private int hours,minutes,seconds;
  public Time(int hh,int mm,int ss)
  {
  	this.hours = hh%24;
    this.minutes = mm%60;
    this.seconds = ss%60;
  }
  public int Hpurs()
  {
  	return this.hours;
  }
}

许多常用操作符不能应用于自定义的结构类型,比如==和!=,但可以使用Equals()方法来比较。

9.2.2

*结构不能声明自己的默认构造器,是因为编译器始终都会自动生成一个。结构内的字段必须显示初始化,否则无法编译。

*类的实例字段可以在声明时初始化,但结构不可以。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  LxKByvFwtHdi   2023年11月02日   41   0   0 主键字段spring
  lh6O4DgR0ZQ8   2023年11月22日   26   0   0 Memory字段sed
  cnCTZTo8tgOC   2023年11月02日   34   0   0 父类字段子类
  LxKByvFwtHdi   2023年11月02日   42   0   0 主键字段外键
  MV69bd6votD4   2023年11月02日   57   0   0 javaidespring
zOE2xWkB8BXt