文档介绍:Net面向对象程序设计-9-使用枚举和结构来创建值类型-2019-2019-2
可爱卡通创意手绘通用PPT幻灯片演讲
第9章 理解值和引用使用枚举和结构来创建值类型
声明枚举类型
创建并使用枚举类型
声明结构类型
创建结构和类在行的每个元素所对应的整数都递增1.
若要获得一个枚举变量的基础整数值,必须进行转换
enum Season { Spring, Summer, Fall, Winter }
...
Season colorful = ;
((int)colorful); // writes out '2‘
也可以把一个特定的整数常量和一个枚举的文字常量关联起来
例如:
enum Season { Spring = 1, Summer, Fall, Winter }
多个枚举文字常量可以拥有相同的基础值
例如:秋天
英国Autumn,美国Fall
enum Season { Spring, Summer, Fall, Autumn = Fall, Winter }
声明结构
struct Time
{
public int hours, minutes, seconds;
}
尽量不要把结构的字段声明为public,可以通过为结构添加构造器和方法初始化和处理这些字段
struct Time
{
public Time(int hh, int mm, int ss)
{
hours = hh % 24; minutes = mm % 60;seconds = ss % 60;
}
public int Hours()
{
return hours;
}
...
private int hours, minutes, seconds;
}
结构主要适用于实现“值”的概念
对于简单的、比较小的数据值,如果复制值的效率等同于或者基本等同于一个地址的效率,就是用结构
对于较复杂的数据,就考虑使用类
理解结构和类的区别
不能为结构声明默认的构造器,因为编译器始终会帮我们生成一个
struct Time
{
public Time() { ... } // compile-time error
...
}
在编译器为结构生成的默认构造器中,总是将字段设为0,false或者null
假如不使用默认的构造器,还可以提供一个非默认的构造器,用它将字段初始化不同的值
在自己写的一个构造器中,必须自己负责初始化所有的字段,编译器不会再帮我们初始化。
即,必须在结构的所有非默认构造器中显式地初始化所有字段,否则会造成编译器错误
struct Time
{
private int hours, minutes, seconds;
...
public Time(int hh, int mm)
{
= hh;
= mm;
} // compile-time error: seconds not initialized
}
在一个类中,可以在声明一个实例字段的同时初始化它,但在结构中不允许这么做
struct Time
{
private int hours = 0; // compile-time error
private int minutes;
private int seconds;
...
}
阅读课本163页,类和结构的主要区别表
声明结构变量
struct Time
{
private int hours, minutes, seconds;
...
}
class Example
{
private Time currentTime;
public void Method(Time parameter)
{
Time localVariable;
...
}
}
可以使用?修饰符创建一个结构变量的可空版本,然后把null值赋给这个变量
Time? currentTime = null;
理解结构的初始化
如果调用一个构造器,则结构中的所有字段都将得到初始化
Time now = new Time();
由于结构是值类型,所以不需要调用构造器就可以创建结构变量
Time now;
在自己的构造器中,必须显式初始化一个struct的所有字段
struct Time
{
private int hours, minutes, seconds;
...
public Time(int hh, int mm)
{
hours = hh;
minutes = mm;
seconds = 0;
}
}
Time now = new