“结构”或“记录”概念是在“类”概念之前创建的。有时,可以互换。
何时使用结构的变量、字段或实例:
(1) 当只有数据成员需要它时,没有方法。或者很少有很少使用的方法,例如构造函数。
例子:
struct CoordinateStruct
{
int X;
int Y;
}
(2) 当需要大量元素时,由于对象使用额外的内存,有时是不可见的,将方法迁移到容器元素,例如另一个对象、类似模块(命名空间)的对象或单例对象(享元设计图案)。
前:
class PointClass
{
int X;
int Y;
// its also an object / class
Color Color;
public void assign(int NewX, int NewY, Color NewColor) { ... }
public void move(int addX, int addNewY) { ... }
}
// multiple element container
class CADAppClass
{
List<Point> Points;
// ...
}
// Not enough memory Exception !!!
后:
struct PointStruct
{
int X;
int Y;
// its a low memory integer
int Color;
}
// multiple element container
class CADAppClass
{
List<Point> Points;
public void assignPoint
(ref PointStruct Point, int NewX, int NewY, Color NewColor) { ... }
public void movePoint
(ref PointStruct Point, int addX, int addNewY) { ... }
// ...
}
(3) 当你需要封装数据元素时,即使是少量的元素,在一个变量中,即使有方法、操作符、事件或“消息”。封装,可能以序列化为例(从 DLL、DCOM、JSON、纯数据文件加载)。
前:
class CustomerClass
{
String FirstName;
String LastName;
public void Store(Stream Destination) { ... }
public void Load(Stream Source) { ... }
public void CopyTo(CustomerClass Destination) { ... }
public void CopyFrom(CustomerClass Source) { ... }
}
后:
struct CustomerStruct
{
char[100] FirstName;
char[100] LastName;
}
// one to one, nested, relationship, seems redudant,
// but required
Class CustomerClass
{
CustomerStruct Data;
public void Store(Stream Destination) { ... }
public void Load(Stream Source) { ... }
public void CopyTo(CustomerStruct Destination) { ... }
public void CopyFrom(CustomerStruct Source) { ... }
}
我在面向对象和类的编程语言中使用了这个枚举,而不是结构,但是,它不像 Java 或 C# 那样将枚举视为对象(例如:面向对象的 PHP 和对象 Pascal)。
(4) 前面的案例或场景的混合,没有考虑。
干杯。