在代码中,我们可以使用类和结构体来定义自己的自定义数据类型。然而,结构体实例总是通过值传递,类实例总是通过引用传递。这意味两者适用不同的任务。当我们在考虑一个工程项目的数据结构和功能的时候,就需要决定每个数据结构是定义成类还是结构体。
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
- 该数据结构的主要目的是用来封装少量相关简单数据值。
- 有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。
- 该数据结构不需要去继承另一个既有类型的属性或者行为。
举例来说,以下情境中适合使用结构体:
- 几何形状的大小,封装一个 width 属性和 height 属性,两者均为 Double 类型。
- 一定范围内的路径,封装一个 start 属性和 length 属性,两者均为 Int 类型。
- 三维坐标系内一点,封装 x , y 和 z 属性,三者均为 Double 类型。
在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的自定义数据构造都应该是类,而非结构体。