C# 8.0本质论
上QQ阅读APP看书,第一时间看更新

6.2 实例字段

面向对象设计的一个核心部分是分组数据来建立特定结构。本节讨论如何在Employee类中添加数据。在面向对象术语中,在类中存储数据的变量称为成员变量。这个术语在C#中很好理解,但更标准、更符合规范的术语是字段,它是与包容类型关联的具名存储单元。实例字段是在类的级别上声明的变量,用于存储与对象(实例)关联的数据。

6.2.1 声明实例字段

代码清单6.4对Employee进行了修改,在其中包含了三个字段:FirstName、LastName和Salary。(为了描述方便,下面示例以及后续相关示例均没有被标记为C# 8.0,但是实际上Salary字段的声明使用了C# 8.0中的可空引用类型。)

代码清单6.4 声明字段

添加好字段后,就可随同每个Employee实例存储一些基本数据。本例添加访问修饰符public作为字段前缀。为字段添加public前缀,意味着可从Employee之外的其他类访问该字段中的数据(参见本章后面的6.5节)。

和局部变量声明一样,字段声明包含字段所引用的数据类型。此外,还可在声明的同时初始化为字段,如代码清单6.5的Salary字段所示。

代码清单6.5 在声明时设置字段的初始值

字段命名和编码的设计规范稍后在介绍了C#“属性”之后给出。现在将暂时使用不符合规范的写法。因为这个原因,上面示例中的代码会触发下面两个编译器警告[1]

·CS0469:从未对字段“……”赋值,字段将一直保持其默认值null。

·CS8618:不可为null的字段“……”必须包含非null值。

在上面示例中,FirstName和LastName会因为没有被赋值而触发CS8618警告。

为了描述方便,这里暂时忽略警告,并用#pragma warning disable将它们关闭。在本章后面,随着示例代码的不断完善,将不再需要关闭这些警告。

6.2.2 访问实例字段

可设置和获取字段中的数据。注意字段不包含static修饰符,这意味着它是实例字段。只能从其包容类的实例(对象)中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问)。

代码清单6.6展示了Program类更新后的样子,并展示了它利用Employee类的情况。输出6.1展示了结果。

代码清单6.6 访问字段

输出6.1

代码清单6.6实例化两个Employee对象,这和之前的例子一样。接着设置每个字段,调用IncreaseSalary()来更改工资,然后显示与employee1引用的对象关联的每个字段。

注意首先必须指定要操作哪个Employee实例。所以,在对字段进行赋值和访问(取值)时都要添加employee1变量作为字段名的前缀。

[1] 警告语有可能因为编译器的语言版本不同而有轻微变化。——译者注