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