zoukankan      html  css  js  c++  java
  • 第九章、使用枚举和结构创建值类型

      使用枚举

      可以使用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;

  • 相关阅读:
    Luogu-P2295 MICE
    Luogu-P2627 修剪草坪
    Loj-10176-最大连续和
    Luogu-P1886 滑动窗口
    Luogu-P3807 【模板】卢卡斯定理
    Luogu-P1879 [USACO06NOV]玉米田Corn Fields
    Luogu-P1896 [SCOI2005]互不侵犯
    Loj-SGU 223-国王
    Luogu-P2657 [SCOI2009]windy数
    素数
  • 原文地址:https://www.cnblogs.com/linhuide/p/5819856.html
Copyright © 2011-2022 走看看