目录
4.1 类的概述
在上一章中,我们看到C#提供了用户6种用户定义类型。其中最重要的,也是首先要阐述的是类。因为类在C#中是个很大的主题,关于它的讨论将会延伸到接下来的几章。
类是一种活动的数据结构
在面向对象的分析和设计产生之前,程序员们仅把程序当做指令的序列。那时的焦点主要放在指令的组合和优化上。随着面向对象的出现,焦点从优化指令转移到组织程序的数据和功能上来。程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,并被称为类。
类是一个能存储数据并执行代码的数据结构。它包含数据成员和函数成员。
- 数据成员 它存储与类或类的实例相关的数据。数据成员通常模拟该类所表示的现实世界事物的特性。
- 函数成员 它执行代码。通常会模拟类所表示的现实世界事物的功能和操作。
一个C#类可以有任意数目的数据成员和函数成员。成员可以是9种可能的成员类型的任意组合。这些成员类型如表4-1所示。本章将会阐述字段和方法。
4.2 程序和类:一个快速实例
一个运行中的C#程序是一组相互作用的类型对象,他们中的大部分是类的实例。例如,假设有一个模拟扑克牌游戏的程序。当程序运行时,他有一个名为Dealer的类的实例,它的工作就是运行游戏。还有几个名为Player的类实例,他们代表游戏的玩家。
Dealer对象保存纸牌的当前状态和玩家数目等信息。它的动作包括洗牌和发牌。
Player类有很大不同。它保存玩家名称以及用于押注的钱的信息,并实现如分析玩家当前手上的牌和出牌这样的动作。运行中的程序如图4-1所示。类名显示在方框外面,实例名显示在方框内。
一个真正的程序无疑会包含除Dealer和Player之外的许多其他的类,还会包括像Card和Deck这样的类。每一个类都模拟某种扑克牌游戏中的事物。
4.3 声明类
或许你能猜到,虽然类型int、double和char由C4#定义,但像Dealer和Player这样的类不是由语言定义的。如果想在程序中使用他们,你必须自己定义,通过编写类的声明定义类。
类的声明定义类的特征和成员。它并不创建类的实例,但创建了用于创建实例的模板。类的声明提供下列内容:
- 类的名称;
- 类的成员;
- 类的特征。
下面是一个最简单的类声明语法示例。大括号包含了成员的声明,他们组成了类主体。类成员可以在类主体内部以任何顺序声明。这意味着成员的声明完全可以引用另一个在后面的类声明中才定义的成员。
4.4 类成员
字段和方法是最重要的类成员类型。字段是数据成员,方法是函数成员。
4.4.1 字段
字段是隶属于类的变量。
- 它可以是任何类型,无论是预定义类型还是用户定义类型。
- 和所有变量一样,字段用来保存数据,并具有如下特性;
- 他们可以被写入;
- 它们可以被读取。
声明一个字段最简单的语句如下:
1.显示和隐式字段初始化
因为字段是一种变量,所以字段初始化语句在语法上和上一章所描述的变量初始化语句相同。
- 字段初始化语句是字段声明的一部分,由一个等于号后面跟着一个求值表达式组成。
- 初始化值必须是编译时可确定的。
class Myclass
{
int F1 = 17; //字段初始值
}
- 如果没有初始化语句,字段的值会被编译器设置为默认值,默