第九章、使用枚举和结构创建值类型

  使用枚举

  可以使用enum关键字来创建枚举类型,限制其值只能是一组符号名称。

  声明枚举

  enum Season{ Spring,Summer,Fall,Winter}

  使用枚举

  声明好枚举之后,可以像使用其他类型的那样使用它们。假定枚举名称为Season,那么可以创建Season类型的变量,Season类型的字段以及Season类型的方法参数,如下

  enum Season{ Spring,Summer,Fall,Winter}

  class Example{

  public void Method(Season parameter)//方法参数

  {

  Saeson localVariable;//局部变量

  。。。。

  }

  private Season currentSeason;//字段

  }

  枚举类型的变量只有在赋值之后才能使用。只能将枚举类型定义好的赋值给该类型的变量。例如:

  Season colorful = Season.Fall;

  Console.WriteLine(colorful);//输出Fall

  和所有值类型一样,可以使用?修饰符来创建可空枚举变量。

  适用于整数变量的许多标准操作符也适用于枚举变量。唯一例外的是按位和移位。

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

  enum Season{ Spring,Summer,Fall,Winter}

  。。。

  Season colorful = Season.Fall;

  Console.WriteLine((int)colorful);//输出“2”

  如果愿意,可以将特定整数常量(例如1)和枚举类型的文字常量手动关联起来

  enum Season{ Spring = 1,Summer,Fall,Winter}

  Spring,Summer,Fall,Winter的基础值将变成1,2,3,4

  选择枚举的基本类型

  enum Season:short{ Spring,Summer,Fall,Winter}

  使用结构

  结构是值类型,在栈上存储。结构可以包含自己的字段、方法和构造器。

  声明结构

  struct Date

  {

  private int year;//字段

  private Month month;

  private int day;

  public Date(int ccyy, Month mm, int dd)//构造器

  {

  this.year = ccyy - 1900;

  this.month = mm;

  this.day = dd -1;

  }

  public override string ToString()//方法

  {

  string date = String.Format("{0},{1},{2}",this.month,this.day -1,this.year + 1900);

  return date;

  }

  public void AdvanceMonth()//方法

  {

  this.month++;

  if (this.month == Month.December + 1)

  {

  this.month = Month.January;

  this.year++;

  }

  }

  }

  理解结构和类的区别

  ①不能为结构声明默认构造器(无参构造器)。之所以不能为结构声明自己的默认构造器,是由于编译器始终都会自动生成一个。

  自己写的构造器必须显示初始化所有字段,否则会发生编译错误。

  struct Time{

  private int hours,minutes,seconds;

  ......

  public Time(int hh,int mm)

  {

  this.hours = hh;

  this.minutes = mm;

  }//编译时错误,seconds未初始化

  }

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

  struct Time{

  private int hours = 0;//编译时错误

  private int minutes;

  private int seconds;

  }

  复制结构变量

  可将结构变量初始化或赋值为另外一个结构变量,前提是操作符=右侧的结构变量已完全初始化。

  Time now = new Time(12,30);

  Time copy = now;

原文地址:https://www.cnblogs.com/linhuide/p/5819856.html